【发布时间】:2017-02-01 19:21:27
【问题描述】:
如何在更改对象时停止$watch
这是一个$watch函数
$scope.$watch($scope.OneTime,function(old,new)
{
// my function
});
只要我的 (
OneTime) 对象值发生更改,就会触发上述$watch函数。
但我不会在每次更改时观察对象,我只想在仅在第一次更改对象时触发$watch 函数。
我也尝试了一些东西,并从angular.js 脚本文件中找到了一个函数但我不知道下面的函数到底在做什么。
你可以从 angular.js 脚本文件中找到这个函数
function oneTimeWatchDelegate(scope, listener, objectEquality, parsedExpression) {
var unwatch, lastValue;
return unwatch = scope.$watch(function oneTimeWatch(scope) {
return parsedExpression(scope);
}, function oneTimeListener(value, old, scope) {
lastValue = value;
if (isFunction(listener)) {
listener.apply(this, arguments);
}
if (isDefined(value)) {
scope.$$postDigest(function () {
if (isDefined(lastValue)) {
unwatch();
}
});
}
}, objectEquality);
}
但是我在函数内部看到了一个漂亮的词unwatch();。所以我想我需要在$watch 函数结束时使用$unwatch 作为对象。但是我在 Angular 文档中的任何地方都找不到关于 $unwatch 概念的任何信息。但我可以在角度脚本上看到它。
我对通过以下方式手动停止此 $watch 功能有一些想法
var unwatch = $scope.$watch("OneTime", function() {
//...
});
setTimeout(function() {
unwatch();
}, 1000);
但是我正在考虑如果 angular 提供给
unwatch函数来停止观看,这将很容易在我的整个应用程序中处理。 因此计划在我的应用程序中覆盖 angular.js 文件中的某些内容。 如果您对覆盖 angular.js 脚本文件以创建与$watch函数相同的$unwatch函数有任何想法,请告诉我.并且还让我知道 Angular 有任何$unwatch功能。
【问题讨论】:
-
当 Angular 已经允许您注销观察者时,
$unwatch函数的意义何在? -
将
$scope.$watch的返回值作为函数(var unwatch; unwatch = $scope.$watch('foo',function(){unwatch()}))调用,取消监视。$watch函数的原始实例化已经返回了您正在寻找的“$unwatch”函数。这有意义吗?
标签: javascript jquery angularjs watch