控制器函数中的AngularJS私有变量

Rya*_*Gao 7 javascript angularjs

我是Angularjs的新手.我在网上遇到了一个例子,让我很困惑.这是代码:

angular.module("testApp",[]).controller("testCtrl", function($scope){

    var data = "Hello";

    $scope.getData = function(){
        return data;
    }

    $scope.setData = function(newData){
        data = newData;
    }
});
Run Code Online (Sandbox Code Playgroud)

这是观点:

<html ng-app = "testApp">
    <head>
        <script src="lib/Angular.js"></script>
        <script src = "foo.js"></script>
    </head>
    <body ng-controller="testCtrl">
        <div ng-click="setData('Hello Hello')">{{getData()}}</div>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我的问题是angular如何知道何时在视图中触发getData()方法.click事件将更改数据.然而它是一个私有变量,没有附加到$ scope,这意味着$ scope不会观察它的变化,那么angular如何知道何时在视图中调用getData()?我知道这可能是一个愚蠢的问题,但请帮忙!非常感谢!!

小智 10

双卷曲表达式是AngularJS称之为观察指令的表达式.在编译阶段,该指令使用$watch作用域的方法在表达式上注册侦听器.

另一方面,ng-clickAngularJS调用了一个监听器指令.这种类型的指令使用DOM注册侦听器.每当DOM事件触发时,该指令都会在$apply调用中执行关联的表达式.

这意味着在执行单击表达式后,$digest将开始一个循环.在此循环中,作用域检查所有已注册的$watch表达式(例如,包含双卷曲表达式getData()),并在与前一个值存在差异的情况下调用侦听器.

最后,正是这个摘要周期确保了所有绑定表达式的计算.