4

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

4

1 回答 1

1

在没有看到实际代码的情况下(我知道你不能发布确切的代码,因为它是为了你的工作)我只能猜测。但是我认为正在发生的事情是您正在通过返回来调整元素的样式,$scope. innerBarStyle这触发了ng-style调用摘要循环的指令,该指令再次触发了作用域函数。因此,这个逻辑的持续执行。

为了解决这个问题,您可能应该使用指令中的angular.elementAPIelem来调整 CSS。

于 2015-12-22T16:40:05.033 回答