7

コントローラーでイベントを確認できますが、$routeChangeStartAngularにとどまるように指示する方法がわかりません。「保存、削除、キャンセルしますか?」などのポップアップを表示する必要があります。ユーザーがキャンセルを選択した場合は、現在の「ページ」に留まります。リスナーがルート変更をキャンセルできるイベントは表示されません。

4

3 に答える 3

16

あなたは間違ったイベントを聞いています、私は少しグーグルをしましたが、ドキュメントで何も見つかりませんでした。これの簡単なテスト:

$scope.$on("$locationChangeStart", function(event){
    event.preventDefault();
})

グローバルコントローラでは、場所の変更を防ぎました。

于 2012-12-20T01:25:40.510 に答える
2

これを行うための文書化された方法は、ルートのresolveプロパティを使用することです。

'$ route'サービスのドキュメントには、'resolve'プロミスのいずれかが拒否された場合に'$routeChangeError'イベントが発生することが記載されています。1つまり、「$ routeProvider」を使用して、ルートの変更を防ぎたい場合に後で拒否されるPromiseを返す関数を指定できます。

この方法の利点の1つは、非同期タスクの結果に基づいてPromiseを解決または拒否できることです。

于 2013-01-30T17:10:13.390 に答える
0
$scope.$watch("$locationChangeStart", function(event){
    event.preventDefault(); 
});

あなたもこのようにすることができます。この方法の利点は、$ onを指定したif()ステートメントを介してトリガーされないことです...以下のコードは、条件が何であってもトリガーされることがよくわかります。

if(condition){ //it doesn't matter what the condition is true or false
  $scope.$on("$locationChangeStart", function(event){ //this gets triggered
     event.preventDefault();  
  }); 
}
于 2014-02-10T23:45:14.220 に答える