AngularJs 摘要循环是否在任何函数调用后触发?
Is AngularJs digest cycle triggered after any function call?
我有一个指令在 link 阶段定义一个函数 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 服务)。但在这种情况下,函数实际上什么都不做。摘要周期是否有可能在其他地方触发,或者我错过了什么?
顺便说一句,我知道会有更好的方法来达到相同的结果,我只是想知道这里的工作原理。
没有看到实际的代码(我知道你不能 post 确切的代码,因为它是为你的工作准备的)我只能猜测。但我认为发生的事情是您正在通过 $scope. innerBarStyle
的 return 调整元素的样式,这会触发 ng-style
指令,该指令调用摘要循环,再次触发范围函数.因此,不断执行此逻辑。
为了解决这个问题,您可能应该在指令的 elem
上使用 angular.element
API 来调整 CSS.
我有一个指令在 link 阶段定义一个函数 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 服务)。但在这种情况下,函数实际上什么都不做。摘要周期是否有可能在其他地方触发,或者我错过了什么? 顺便说一句,我知道会有更好的方法来达到相同的结果,我只是想知道这里的工作原理。
没有看到实际的代码(我知道你不能 post 确切的代码,因为它是为你的工作准备的)我只能猜测。但我认为发生的事情是您正在通过 $scope. innerBarStyle
的 return 调整元素的样式,这会触发 ng-style
指令,该指令调用摘要循环,再次触发范围函数.因此,不断执行此逻辑。
为了解决这个问题,您可能应该在指令的 elem
上使用 angular.element
API 来调整 CSS.