如何在更改对象时停止$watch
这是一个$watch
函数
$scope.$watch($scope.OneTime,function(old,new)
{
// my function
});
每当我的(
$watch
)对象值更改时,上面的OneTime
函数就会触发。但是我不会看每次更改的对象,只想在仅第一次更改对象时触发
$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();
。所以我想当$unwatch
函数结束时我需要对对象使用$watch
。但是我在棱角文档的任何地方都没有得到关于$unwatch
概念的任何信息。但我可以在角度脚本上看到它。我对通过以下方式手动停止此$ watch函数有一些想法
var unwatch = $scope.$watch("OneTime", function() {
//...
});
setTimeout(function() {
unwatch();
}, 1000);
但是我在考虑是否为
unwatch
功能提供角度来停止观看,在我的整个应用程序中都将很容易处理。因此计划覆盖我应用程序中angular.js文件中的某些内容。让我知道您是否有关于重写angular.js脚本文件来创建与$unwatch
函数相同的$watch
函数的想法。同时也让我知道angular具有any $unwatch
函数。 最佳答案
我认为您需要一种绑定方式
你可以实现这个br
{{::oneTime}}
在您的html页面中,一次性表达式一旦稳定就会停止重新计算,这种情况会在第一次摘要后发生
var $unwatch=$scope.$watch('onetime',function(){
unregister();
}