angularjs interval应用了根镜的变化

时间:2014-08-19 12:20:14

标签: javascript angularjs scope intervals

我跟着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/

我不希望更改时间的消息

由于

1 个答案:

答案 0 :(得分:3)

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

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

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

有一点令人困惑的是,您正在直接修改DOM。在这种情况下,您不需要任何申请。内容将以任何一种方式改变。