Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如果函数在单击时被调用,则为ng_Angularjs_Angularjs Directive_Angularjs Ng Repeat - Fatal编程技术网

Angularjs 如果函数在单击时被调用,则为ng

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

我在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-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
进行了评估。