我跟着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/
我不希望更改时间的消息
由于
答案 0 :(得分:3)
是的,这是可能的。
使用window.setInterval
或window.setTimeout
创建您的时间间隔,并在每个周期后调用scope.$digest
。
如果您对这个主题感兴趣,可以阅读这篇非常有趣的文章:https://coderwall.com/p/d_aisq
编辑: 请参阅jsfiddle上的示例:http://jsfiddle.net/huxhpy0L/2/
有一点令人困惑的是,您正在直接修改DOM。在这种情况下,您不需要任何申请。内容将以任何一种方式改变。