注册并取消注册angular js watch

时间:2013-02-04 16:07:53

标签: angularjs watch

在我的应用程序中,我想为用户提供一个复选框,以便切换应用程序是否定期在后台轮询新数据。 我已经设置了一个手表来进行数据轮询。而且我知道如果我在创建时为该手表分配变量,我可以调用该变量,手表将被禁用/取消注册。 我的问题是,当用户点击文本框时,我希望手表恢复生机。我还没有找到完成这项工作的最佳方法。 这是我的样本fiddle,它有点说明了这个问题。我想如果我可以让它在那里工作,我可以装备其余部分。 无法工作的部分是手表需要重新上线的部分:

 if ($scope.counter === 15) {
        $scope.$watch('counter', theWatchFunction);
        $scope.test = "back on";
    }

2 个答案:

答案 0 :(得分:4)

您不能简单地取消注册观察者并等待它再次自动重新注册。您运行myWatch()时,theWatchFunction内的所有内容都将永远无法再次运行。您可以注册一个新的观察者,但不在<{1}}内

例如,您可以在theWatchFunction观察者身上重新注册counter观察者:http://jsfiddle.net/bmleite/Lw3Lp/

答案 1 :(得分:0)

你很接近,你的jsfiddle不工作的原因是因为在柜台7,你取消了手表。由于您重新打开手表的代码位于WatchFunction中,因此永远不会调用它,因为手表已被禁用,因此该功能不再被执行。

我已经对计数器进行了检查,以便在超时功能中重新启动手表,它似乎正常工作。

    $timeout(function () {
        $scope.time = new Date();
        $scope.counter++;
        if ($scope.counter === 15) {
           myWatch = $scope.$watch('counter', theWatchFunction);
        }
    }, 1000);

我已经分了一个fiddle来演示一个可以让你上路的工作版本。希望有所帮助!