[英]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);
};
});
奇怪的!!!!
这是angular js中的一种正常行为,因为无论您采用ng-show采取何种方法,它都会不断发生,而angular会尝试检查条件(在这种情况下,该方法称为“ checkItem()”方法,该方法会弹出警报框),所以我不认为这是任何代码故障的结果。
这是因为AngularJS在用于ng-show
的表达式上设置了“监视”。 然后,它定期重新评估该表达式(在称为摘要循环的过程中 )以查看值是否已更改。 由于表达式涉及调用函数,因此每次对表达式求值时都会调用该函数。
此摘要周期 非常频繁地发生,您无法始终控制它的发生时间。 结果,只有在用于ng-if
, ng-show
, ng-class
等之ng-class
表达式中的调用函数才返回值(而不是像显示警报,更改状态等那样)。
以下是触发摘要的一些情况(还有更多情况):
$scope.$apply()
或$scope.$digest()
$timeout
或$interval
正如您所希望看到的,这是由很多原因造成的,因此您不想在其中做比所需更多的工作,并且它评估的所有表达式都只能返回值。
ItemController
是否在页面上出现多次? 那可以解释您遇到的行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.