Angularjs 如果函数在单击时被调用,则为ng
我在Plnkr上有我的代码: html代码非常简单:Angularjs 如果函数在单击时被调用,则为ng,angularjs,angularjs-directive,angularjs-ng-repeat,Angularjs,Angularjs Directive,Angularjs Ng Repeat,我在Plnkr上有我的代码: html代码非常简单: <div ng-app="myApp" ng-controller="MainCtrl"> <div ng-dropdown-multiselect="" options="myData" selected-model="myModel" extra-settings="mySettings" events="myEvents"></div> <div ng-repea
<div ng-app="myApp" ng-controller="MainCtrl">
<div ng-dropdown-multiselect="" options="myData" selected-model="myModel" extra-settings="mySettings" events="myEvents"></div>
<div ng-repeat="item in Items">
<item-input></item-input>
</div>
</div>
</div>
基本上,问题是每次我单击页面上的任意位置时,都会调用我在ng if中的函数。我认为它与多选控件有关,但我不确定应该在哪里修复它。感谢您的帮助
谢谢
已更新
我真正不明白的是,当我注释掉多选下拉列表(
)时,为什么会停止这种行为?如下图所示,取自Chrome DevTools,多选下拉列表正在生成两个单击事件处理程序:
按钮上有一个事件,整个文档上有一个事件。因此,单击文档至少会触发最后一个事件处理程序,这可能会更改模型。然后执行一个摘要循环,这意味着在是否应从DOM中删除元素的情况下,将对绑定到ngIf
指令的displayMe
函数进行求值
如果删除下拉组件,从而删除这两个单击处理程序,则会留下3个文本输入。事实上,现在单击文档后没有摘要,因为没有执行任何处理程序,但是您仍然可以通过在输入元素中键入来触发摘要
有一些关于Angular 1.x中脏检查过程的有价值的信息。单击会触发摘要循环,因此绑定到
ng的函数displayMe
如果评估了指令确实没有错误,Angular就是这样工作的,因此,请确保所有绑定的计算速度都很快。我建议您不要试图控制某些指令(包括ng if)中的计算次数。Angularjs在需要自动数据绑定时触发“摘要循环”,这为我们提供了巨大的优势。@MichaelP。我能理解点击会触发一个摘要周期。然而,当我通过注释掉这个行为停止来删除multi-select下拉列表时,为什么会这样呢?实际上,并不是每次单击都会触发摘要:如果没有对可能更改模型的事件处理程序进行评估,就没有理由进行脏检查。通过删除下拉列表,您删除了两个单击处理程序(一个绑定在下拉列表上,另一个绑定在整个文档上)。只要在文档中输入文本,我就可以通过键入一些内容来触发摘要,这是非常合乎逻辑的。我的第一条评论应该是:click事件触发了一个处理程序,而该处理程序又触发了一个摘要,因此对函数displayMe
进行了评估。