角度js - 使用ng-checked内部ng-repeat多次触发功能

时间:2016-09-09 01:57:49

标签: javascript angularjs

我有以下html,它有一个生成复选框的ng-repeat:

<span ng-repeat="name in $ctrl.widgetSelectorNames" class="widget-selectors">
        <label class="checkbox" for="{{name}}">
            <input type="checkbox" value="{{name}}" ng-model="name" ng-change="$ctrl.toggleVisibility(name)" ng-checked="$ctrl.checkIfHidden(name)"/>
            {{name}}
        </label>
</span>
如果相关项目的隐藏属性为true,那么我正在尝试做的是ng-checked = true。我认为我的逻辑是正确的,但ng-checked函数运行的次数太多了:

  let numTimesCalled = 0;
  $ctrl.checkIfHidden = function (name){
    numTimesCalled++;
    console.log(numTimesCalled);
    $ctrl.widgets.forEach(widget => {
      if (name == widget.name && widget.hidden) {
        return true;
      }
    })
    return false;
  }

$ctrl.widgetSelectorNames中有六个项目,但根据numTimesCalled变量调用该函数48次!发生了什么?如果这不是正确的方法,那么更好的方法是什么?

1 个答案:

答案 0 :(得分:0)

这是一个老问题,但对于那些想要了解幕后发生的事情的人可以阅读。

ng-checked表达式需要在每个$digest上进行评估。

见这里: https://docs.angularjs.org/guide/scope#integration-with-the-browser-event-loop