javascript – 在任何函数调用之后是否触发AngularJs摘要周期?

我有一个指令,在链接阶段定义一个函数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.

点赞