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

时间:2015-12-22 16:09:07

标签: javascript angularjs angular-digest

我有一个在链接阶段定义函数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服务)。但在这种情况下,该功能实际上什么都不做。摘要周期是否可能在其他地方被触发或者我错过了什么? 顺便说一句,我知道有更好的方法可以达到相同的结果,我只是对这里的工作原理感到好奇。

1 个答案:

答案 0 :(得分:1)

没有看到实际的代码(我知道你不能发布确切的代码,因为它是你的工作)我只能猜测。但我认为发生的是你通过返回$scope. innerBarStyle来调整元素的样式,这会触发调用摘要周期的ng-style指令,这会再次触发作用域函数。因此,我们不断执行这种逻辑。

为了解决这个问题,您应该使用指令angular.element上的elem API来调整CSS。