就在我认为我非常认识Angular的时候,我遇到了这种情况:
有人可以解释一下这是怎么回事吗?
DEMO: http://jsfiddle.net/u08jgd4g/1/
HTML
<div ng-controller="MyCtrl">
<button ng-click="WTF" ng-bind="labelText()"></button>
<div ng-show="showMe()">
Hello, World!
</div>
</div>
JS
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
var show = true;
$scope.labelText = function() {
return !show ? 'Hide' : 'Show';
};
$scope.showMe = function() {
show = !show;
return show;
};
};
如果您还没有发现问题:该按钮具有不存在的ng-click
功能,但当您点击该按钮时,div会切换并且按钮值会发生变化。
答案 0 :(得分:3)
这不是因为该功能不存在,而是因为该点击触发$digest
周期。因此,循环会运行并评估您的ngShow
和ngBind
函数。
这两个函数只是将变量翻转到与它相反的变量并应用结果。因此,所有发生的事情都是触发摘要周期并使您在视图中绑定的函数跳闸。
答案 1 :(得分:1)
这种情况正在发生,因为您使用了ng-click
函数,该函数在评估ng-click
指令上给出的表达式后运行摘要循环。所有watcher
函数的结果将被评估为什么您的值在每次点击时都会切换。
当您使用带有表达式的ng-show
指令时,在场景后面,angular会将该表达式放在watcher
对象下面的$scope
数组中。您可以在watcher
对象中看到$scope.$$watchers
对象的集合。