我有以下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次!发生了什么?如果这不是正确的方法,那么更好的方法是什么?
答案 0 :(得分:0)
这是一个老问题,但对于那些想要了解幕后发生的事情的人可以阅读。
ng-checked
表达式需要在每个$digest
上进行评估。
见这里: https://docs.angularjs.org/guide/scope#integration-with-the-browser-event-loop