AngularJS $ watch unbind函数仅在被调用时未定义

时间:2018-03-27 21:56:48

标签: javascript angularjs watch

我正在使用AngularJS 1.6构建用户会话活动计时器。我正在使用$ scope。$ watch来监控倒数计时器的值。这在很大程度上起作用,尽管$ watch每次调用会话计时器函数时都会多次绑定到变量。为了解决这个问题,我想如果已经定义了观察者,我需要简单地解除绑定。

我看到了一些关于如何在SO上执行此操作的非常简单的示例,但似乎没有任何工作。 $ scope。$ watch方法返回一个函数,调用时解除观察者的绑定。

但是,无论何时调用unbind函数,console.log中都会出现错误'ReferenceError:未定义sessionWatchUnbind'。这看起来很奇怪,因为在IF语句中发生了未定义的错误,该语句在调用函数之前检查函数是否已定义。怎么可以在之后立即定义然后不确定?

Baz

此外,如果我尝试将调用置于观察者的主体内,则会发生同样的错误。

Foo

我很确定我的代码遵循了很多关于如何执行此操作的示例。也许有人可以指出我正确的方向!

更新: 我通过将sessionWatchUnbind绑定到'this'来实现此功能。也许是因为外包装函数也被绑定到'this'。此解决方案基于此处接受的答案:How to prevent/unbind previous $watch in angularjs

Bar

1 个答案:

答案 0 :(得分:1)

此代码适用于我:

const watcher = $scope.$watch('variable', value => {     
    // Remove watcher
    if (value)
       watcher();
});