AngularJs指令不拦截服务的更新
我试图实现使用服务中的数据并做出相应反应的指令。然而,有些地方出了问题,我需要一些帮助。 下面是代码示例,也可以在 然而,对我来说这似乎是对的。我发现的所有样本都没有使用这个技巧。那么,我是不是遗漏了什么?rootScope解决方案合适吗?也许有更好的方法来实现这个目标? 谢谢 使用Angular的$interval而不是window.setIntervalAngularJs指令不拦截服务的更新,angularjs,angularjs-directive,angularjs-service,Angularjs,Angularjs Directive,Angularjs Service,我试图实现使用服务中的数据并做出相应反应的指令。然而,有些地方出了问题,我需要一些帮助。 下面是代码示例,也可以在 然而,对我来说这似乎是对的。我发现的所有样本都没有使用这个技巧。那么,我是不是遗漏了什么?rootScope解决方案合适吗?也许有更好的方法来实现这个目标? 谢谢 使用Angular的$interval而不是window.setInterval 它实际上是在调用apply-under-the-hoods,因此您的解决方案是正确的,只是稍微复杂一点。还可以模拟$interval进行测
它实际上是在调用apply-under-the-hoods,因此您的解决方案是正确的,只是稍微复杂一点。还可以模拟$interval进行测试。感谢您的回复,但在实际代码中,服务根本不使用setInterval。它使用媒体查询侦听器来修改内部状态,但出现了完全相同的问题。同样的原则适用。Angular无法知道某些内容已更改,只能将当前值与监视表达式的保存值进行比较。必须有东西触发这个过程,这就是$apply方法。Anguler自己提供的一切,例如$http、ng click等。。。呼叫$apply在引擎盖下。所以你必须有自己的事件处理代码,如果它在Angular之外的话。好的,我明白了……你知道有什么好文章/文档主题/博客文章详细描述了这一点吗?
var app = angular.module('myApp', []);
app.service('MyService', [
'$rootScope', function($rootScope) {
this.value = 4;
var self = this;
function inc(){
self.value += 3;
}
setInterval(inc, 1000);
}
]);
app.directive('myDir', ['MyService', function(MyService){
return {
link : function(scope, element){
function expr(){
return MyService.value;
}
function react(){
element.html(MyService.value);
}
scope.$watch(expr, react);
react();
}
}
}]);
<div ng-app='myApp'my-dir>
</div>
function inc(){
$rootScope.$apply(function(){
self.value += 3;
});
}
setInterval(inc, 1000);