2013-02-19 7 views
5

URLバーの変更を監視し、それに基づいて特定の操作を行う必要があります。私はそれに変更を見る時計を追加するための最良の方法は何か疑問に思った?

答えて

12

イベントが存在し、それらは単にいくつかの理由のために文書化されていないしています。 $locationChangeStart$locationChangeSuccess

scope.$on('$locationChangeStart', function (event, newLoc, oldLoc){ 
    console.log('changing to: ' + newLoc); 
}); 

scope.$on('$locationChangeSuccess', function (event, newLoc, oldLoc){ 
    console.log('changed to: ' + newLoc); 
}); 

またはアンダースが示唆したように、あなたは$ $の時計の最初の引数に関数を渡すことで、あなたが望む任意の値を見ることができます:

次のイベントを試してみてくださいしかし

scope.$watch(function() { return $location.path(); }, function(newLoc, oldLoc){ 
    console.log(newLoc, oldLoc); 
}); 

これはあなたの$ダイジェストに少しオーバーヘッドを作成します。

+0

ありがとう@blesh。 2つのイベントがいつ発生するのかを特定しようとしています。何か案は? – Lior

+0

これは$ locationの初期化コードにすべて設定されています。 [GitHubのソースを見る](https://github.com/angular/angular.js/blob/master/src/ng/location.js) $ locationChangeStartではCTRL + Fを押すだけです。これは基本的に$ watch()メソッドの提案と同じですが、既に設定されていますので、オーバーヘッドは少なくなります。 –

+0

一言で言えば、 '$ locationChangeStart'が最初に起こり、渡されたイベントオブジェクトに対して' preventDefault() 'を使って変更を防ぐオプションが与えられます。 '$ locationChangeSuccess'は、場所が正常に変更された後に起動します。 (むしろ、あなたが場所を変更することを約束したとき)。 –

1

あなたは、コントローラの$の場所オブジェクトを要求したと仮定すると、あなたはこのようにそれを行うことができます。

$scope.$watch(function() { return $location.path() }, function() { 
    // Do stuff when the location changes 
}); 
関連する問題