1

就在我认为我对 Angular 非常了解时,我遇到了这种情况:

有人可以解释这是怎么可能的吗?

演示: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 切换并且按钮值发生变化。

4

2 回答 2

3

不是因为这个函数不存在,而是因为那个点击触发了一个$digest循环。因此,循环运行并评估您的ngShowngBind功能。

这两个函数只是将变量翻转到与原来相反的位置并应用结果。所以所有发生的事情就是你触发一个摘要循环并触发你绑定在视图中的函数。

于 2016-01-05T15:51:59.283 回答
1

发生这种情况是因为您使用了函数,该函数在评估指令ng-click上给出的表达式后运行摘要循环。ng-click结果所有watcher功能都得到评估,这就是为什么您的价值在每次点击时都会切换。

ng-show当您将指令与表达式一起使用时,在幕后,角度内部将该表达式放在对象watcher下的数组中$scopewatcher您可以在对象内部看到 ' 对象的集合$scope.$$watchers

于 2016-01-05T15:51:48.620 回答