3

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

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

2 回答 2

4

您不能简单地取消注册观察者并等待它自动重新注册。你运行myWatch()里面的所有东西的那一刻theWatchFunction将永远不会再运行。您可以注册一个新的观察者,但不能theWatchFunction.

You can, for example, re-register the counter watcher on the time watcher: http://jsfiddle.net/bmleite/Lw3Lp/

于 2013-02-04T16:22:50.960 回答
0

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

我已经在超时功能中检查了计数器以重新打开手表,它似乎工作正常。

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

我已经分叉了一个小提琴,演示了一个可以让你上路的工作版本。希望有帮助!

于 2013-02-04T16:22:43.407 回答