我有一个指令,在链接阶段定义一个函数innerBarStyle()并将其绑定到范围:
restrict : 'EA',
scope: {
values: '='
},
link: function(scope, elements, attributes){
scope.innerBarStyle = function(value){
console.count("innerBarStyleCounter");
return {
width: 10px;
};
}),
templateUrl: 'template.html'
};
该函数除了计算它执行和返回对象的次数之外什么都不做.
现在,在模板指令的模板中,我通过表达式调用此函数.类似于< div … ng-style = innerBarStyle(someValueInCurrentScope)>< div>
我在实践中得到的是一个无限循环,导致上述函数被重复调用.
经过一些研究,我发现这通常发生在被调用函数隐式或显式触发摘要周期时(例如,如果它使用$http服务).但在这种情况下,该功能实际上什么都不做.摘要周期是否可能在其他地方被触发或者我错过了什么?
顺便说一句,我知道会有更好的方法来达到同样的结果,我只是对这里的工作原理感到好奇.
最佳答案 没有看到实际的代码(我知道你不能发布确切的代码,因为它是为了你的工作)我只能猜测.但我认为正在发生的事情是你通过返回$scope来调整元素的样式. innerBarStyle,它触发调用摘要循环的ng-style指令,再次触发作用域函数.因此,这个逻辑的连续执行.
为了解决这个问题,您应该使用指令elem上的angular.element API来调整CSS.