如何在更改对象时停止$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();
}

09-25 19:32