Javascript 第二次更改对象值时如何停止$watch 如何在更改对象时停止$watch

Javascript 第二次更改对象值时如何停止$watch 如何在更改对象时停止$watch,javascript,jquery,angularjs,watch,Javascript,Jquery,Angularjs,Watch,这里有一个$watch功能 $scope.$watch($scope.OneTime,function(old,new) { // my function }); 每当我的(OneTime)对象值发生更改时,上述$watch功能将启动 但我不想每次更改都查看对象,我只想在第一次更改上的我的对象时启动$watch功能 我还尝试了一些东西,从angular.js脚本文件中找到了一个函数,但我不知道下面的函数到底在做什么 您可以从angular.js脚本文件中找到此函数 function one

这里有一个
$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
函数相同的
$watch
函数有任何想法,请告诉我。并让我知道angular有任何
$unwatch
功能。


AngularJS已经提供了这样的功能,正如您前面提到的。创建观察者时,它会返回一个函数,用于停止观察

$watch(watchExpression,listener,[objectEquality])

返回:
函数()
返回此侦听器的注销函数


要取消对对象的跟踪,只需调用返回的函数。您可以在watch函数中调用它,以便在第一次调用watcher时执行它

var unwatch = null;

// start watching the object
var unwatch = $scope.$watch($scope.OneTime, function(old, new)
{
    // my function

    if (unwatch != null) {
        unwatch();
    }
});

AngularJS已经提供了这样的功能,正如您前面提到的。创建观察者时,它会返回一个函数,用于停止观察

$watch(watchExpression,listener,[objectEquality])

返回:
函数()
返回此侦听器的注销函数


要取消对对象的跟踪,只需调用返回的函数。您可以在watch函数中调用它,以便在第一次调用watcher时执行它

var unwatch = null;

// start watching the object
var unwatch = $scope.$watch($scope.OneTime, function(old, new)
{
    // my function

    if (unwatch != null) {
        unwatch();
    }
});

我想你需要单程装订

你可以做到这一点

{{::oneTime}}
在html页面中,一次性表达式一旦稳定,就会停止重新计算,这发生在第一次摘要之后

var $unwatch=$scope.$watch('onetime',function(){
unregister();
}

我想你需要单程装订

你可以做到这一点

{{::oneTime}}
在html页面中,一次性表达式一旦稳定,就会停止重新计算,这发生在第一次摘要之后

var $unwatch=$scope.$watch('onetime',function(){
unregister();
}

AngularJS已经提供了这样的功能
。这就是我在这里问的原因。我们应该在角脚本上添加这个函数吗?因为使用我的整个应用程序会很舒服。如果AngularJS已经为您提供了它,我不明白您为什么要添加它。要想取消对某些内容的跟踪,首先需要对其进行监视,这就是为什么当前实现将此函数作为监视调用的返回提供给您的原因。您可以在监视函数中调用
unwatch()
,以便在第一次调用监视程序时执行此函数。我将把它添加到我的答案中。
AngularJS已经提供了这样的功能
。这就是我在这里问的原因。我们应该在角脚本上添加这个函数吗?因为使用我的整个应用程序会很舒服。如果AngularJS已经为您提供了它,我不明白您为什么要添加它。要想取消对某些内容的跟踪,首先需要对其进行监视,这就是为什么当前实现将此函数作为监视调用的返回提供给您的原因。您可以在监视函数中调用
unwatch()
,以便在第一次调用监视程序时执行此函数。我将把它添加到我的答案中。看。看,我可以更改值,但我不会启动$watch函数。我计划在angular.js脚本文件中编写一些代码来创建$unwatch函数,如$watch,您需要在angular prototype中添加该函数,如果您可以添加该函数,那么您只需调用unregister();停止监视该变量。请参阅。请参阅,我可以更改该值,但不会启动$watch函数。我计划在angular.js脚本文件中编写一些代码来创建$unwatch函数,如$watch,您需要在angular prototype中添加该函数,如果您可以添加该函数,那么您只需调用unregister();停止监视该变量。
$unwatch
函数在Angular已经允许您注销监视程序时有什么意义?调用
$scope的返回值。$watch
作为函数(
var unwatch;unwatch=$scope.$watch('foo',function(){unwatch()})
)取消监视。您正在查找的“$unwatch”函数已由
$watch
函数的原始实例化返回。这有意义吗?
$unwatch
函数在Angular已经允许您注销观察者时有什么意义?调用
$scope.$watch
的返回值作为函数(
var unwatch;unwatch=$scope.$watch('foo',function(){unwatch()})
)取消观察。您正在查找的“$unwatch”函数已由
$watch
函数的原始实例化返回。这有意义吗?