ng显示自己的ng控制器在加载时多次报警



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

我还点击了另一个div/控制器中的一些图像,它正在调用警报?????添加如下。

我有一个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

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

这种消化周期非常频繁地发生,并且您不能总是控制它何时发生。因此,只有在用于ng-ifng-showng-class等的表达式中,如果函数只返回一个值(而不是显示警报、更改状态等),才可以调用函数。

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

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

正如你所希望看到的,这是造成它的很多原因,所以你不想在它中做比所需更多的工作,并且它计算的所有表达式都应该只返回值。

这是angular js中的一种正常行为,因为无论你采取什么方法,它似乎都会继续发生。由于ng显示,angular都会尝试检查条件(在这种情况下,它会调用一个弹出警报框的方法"checkItem()"),所以我不认为这是任何代码故障的结果。

ItemController是否多次出现在页面上?这可以解释你正在经历的行为。

最新更新