繁体   English   中英

带有自己的ng-controller的ng-show会在负载和多次警报

[英]ng-show with own ng-controller alerting on load and multiple times

为什么我的警报在页面加载时被调用并被调用两次? 那是正常行为吗?

我也用ng键单击另一个div / controller中的某些图像,它正在调用警报。 ?????? 在下面添加。

我有一个如下所示的html标记。

 <div class="item-blue" ng-controller="ItemController as item">
 <div class="col" ng-show="item.checkItem('foo')">

然后在我的控制器是下面。

 app.controller('ItemController', function() {
     this.checkItem = function(bar) {
     alert(bar);
     };
 });

奇怪的!!!!

https://codepen.io/anon/pen/oBjJyw

这是angular js中的一种正常行为,因为无论您采用ng-show采取何种方法,它都会不断发生,而angular会尝试检查条件(在这种情况下,该方法称为“ checkItem()”方法,该方法会弹出警报框),所以我不认为这是任何代码故障的结果。

这是因为AngularJS在用于ng-show的表达式上设置了“监视”。 然后,它定期重新评估该表达式(在称为摘要循环的过程中 )以查看值是否已更改。 由于表达式涉及调用函数,因此每次对表达式求值时都会调用该函数。

摘要周期 非常频繁地发生,您无法始终控制它的发生时间。 结果,只有在用于ng-ifng-showng-class等之ng-class表达式中的调用函数才返回值(而不是像显示警报,更改状态等那样)。

以下是触发摘要的一些情况(还有更多情况):

  • HTTP请求返回
  • 您显式调用$scope.$apply()$scope.$digest()
  • 使用$timeout$interval
  • 您单击鼠标,键入键或移动鼠标(如果使用了侦听这些事件的指令)

正如您所希望看到的,这是由很多原因造成的,因此您不想在其中做比所需更多的工作,并且它评估的所有表达式都只能返回值。

ItemController是否在页面上出现多次? 那可以解释您遇到的行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM