我按照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.setInterval
或window.setTimeout
创建您的间隔,并在每个周期后调用scope.$digest
。
如果你对这个话题感兴趣,你可以阅读这篇非常有趣的文章:https://coderwall.com/p/d_aisq
编辑:请参阅我在jsfiddle上的示例:http://jsfiddle.net/huxhpy0L/2/
让人困惑的一点是,你直接修改了DOM。那样的话,你就不需要申请了。