2013-02-04 45 views
3

在我的应用程序中,我想提供一个用于切换应用程序是否定期轮询新数据的复选框。 我已经安装了一块手表来完成数据轮询。而且我知道,如果我在创建时为该手表分配变量,则可以调用该变量,手表将被禁用/未注册。 我的问题是,当用户点击文本框,我想手表恢复生机。我还没有找到完成这件事的最好方法。 这是我的示例fiddle这有点说明了这个问题。我想如果我能在这里工作,我可以将其余部分加以修改。 不工作的部分是哪里的手表需要回来就行了一部分:注册并取消注册angular js手表

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

回答

4

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

可以,例如,重新注册的time观察者的counter守望者:http://jsfiddle.net/bmleite/Lw3Lp/

0

你接近,你的jsfiddle不工作的原因是因为在计数器7,你取消了手表。由于重新开启手表的代码位于WatchFunction中,因此不会调用该手表,因为手表已被禁用,因此该功能不再执行。

我已经把计时器的检查设置为在超时功能中关闭手表,并且它似乎正常工作。

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

我已经分叉fiddle演示一个工作版本,应该让你的方式。希望有所帮助!