Angularjs的interval在rootscope中应用更改



我按照angularjs的例子做了一个每秒更新一次的定时器。

.directive('myCurrentTime', ['$interval', 'dateFilter', function($interval, dateFilter) {
  return function(scope, element, attrs) {
    var stopTime;
    function updateTime() {
      element.text(dateFilter(new Date(), "hh:mm:ss"));
    }
    updateTime();
    stopTime = $interval(updateTime, 1000);
    element.on('$destroy', function() {
      $interval.cancel(stopTime);
    });
  }
}]);

我的问题是,每次调用函数的间隔(updateTime),整个范围被更新,而不仅仅是指令的范围。问题是,我在根作用域中为语言设置了过滤器,然后它每次都调用所有过滤器,这很糟糕。

是否有可能只在指令的局部范围内应用函数?我试着使用:

 function updateTime() {
     scope.$apply(function () {
           element.text(dateFilter(new Date(), "hh:mm:ss"));
     });
 }
 stopTime = $interval(updateTime, 1000, null, false);

但没有成功。

我添加了一个小提琴的例子:http://jsfiddle.net/f1qqw4d9/2/

我不希望时间下面的信息改变

谢谢

是的,有可能。使用window.setIntervalwindow.setTimeout创建您的间隔,并在每个周期后调用scope.$digest

如果你对这个话题感兴趣,你可以阅读这篇非常有趣的文章:https://coderwall.com/p/d_aisq

编辑:请参阅我在jsfiddle上的示例:http://jsfiddle.net/huxhpy0L/2/

让人困惑的一点是,你直接修改了DOM。那样的话,你就不需要申请了。

最新更新