在我的应用程序中,我想为用户提供一个复选框,以便切换应用程序是否定期在后台轮询新数据。 我已经设置了一个手表来进行数据轮询。而且我知道如果我在创建时为该手表分配变量,我可以调用该变量,手表将被禁用/取消注册。 我的问题是,当用户点击文本框时,我希望手表恢复生机。我还没有找到完成这项工作的最佳方法。 这是我的样本fiddle,它有点说明了这个问题。我想如果我可以让它在那里工作,我可以装备其余部分。 无法工作的部分是手表需要重新上线的部分:
if ($scope.counter === 15) {
$scope.$watch('counter', theWatchFunction);
$scope.test = "back on";
}
答案 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来演示一个可以让你上路的工作版本。希望有所帮助!