AngularJSアプリケーションに監視機能があります。
$scope.$watch('quartzCrystal', function () {
...
}
ただし、何らかの条件(私の例では、シングルページアプリケーションでページを変更する)の後、そのウォッチを停止したいと思います(タイムアウトをクリアするなど)。
どうやってやるの?
AngularJSアプリケーションに監視機能があります。
$scope.$watch('quartzCrystal', function () {
...
}
ただし、何らかの条件(私の例では、シングルページアプリケーションでページを変更する)の後、そのウォッチを停止したいと思います(タイムアウトをクリアするなど)。
どうやってやるの?
$watch
登録解除関数を返します。これを呼び出すと、の登録が解除され$watcher
ます。
var listener = $scope.$watch("quartz", function () {});
// ...
listener(); // Would clear the watch
scope。$watchは、呼び出すことができ、時計の登録を解除する関数を返します。
何かのようなもの:
var unbindWatch = $scope.$watch("myvariable", function() {
//...
});
setTimeout(function() {
unbindWatch();
}, 1000);
何かが起こった直後にウォッチをクリアしたい場合は、コールバック内のウォッチをクリアすることもできます。そうすれば、$watchは使用されるまでアクティブなままになります。
そのようです...
var clearWatch = $scope.$watch('quartzCrystal', function( crystal ){
if( isQuartz( crystal )){
// do something special and then stop watching!
clearWatch();
}else{
// maybe do something special but keep watching!
}
}
$ watchが呼び出さdynamically
れると、インスタンスが作成されるため、関数の前に登録解除関数を呼び出す必要があります$watch
。
if(myWatchFun)
myWatchFun(); // it will destroy your previous $watch if any exist
myWatchFun = $scope.$watch("abc", function () {});
ウォッチャーが多すぎてすべてをクリアする必要がある場合は、ウォッチャーを配列にプッシュして$watch
、ループ内のすべてを破棄できます。
var watchers = [];
watchers.push( $scope.$watch('watch-xxx', function(newVal){
//do something
}));
for(var i = 0; i < watchers.length; ++i){
if(typeof watchers[i] === 'function'){
watchers[i]();
}
}
watchers = [];
理想的には、スコープを離れるときにすべてのカスタムウォッチを削除する必要があります。
これは、メモリ管理とアプリのパフォーマンスの向上に役立ちます。
// call to $watch will return a de-register function
var listener = $scope.$watch(someVariableToWatch, function(....));
$scope.$on('$destroy', function() {
listener(); // call the de-register function on scope destroy
});