javascript - Controller 函数中的 AngularJS 私有(private)变量

标签 javascript angularjs

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

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

    var data = "Hello";

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

    $scope.setData = function(newData){
        data = newData;
    }
});

这是 View :

<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>

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

最佳答案

双 curl 表达式是 AngularJS 所说的观察指令。在编译阶段,该指令使用范围的 $watch 方法在表达式上注册监听器。

另一方面,ng-click 是 AngularJS 所称的 listener 指令。这种类型的指令改为向 DOM 注册一个监听器。每当 DOM 事件触发时,指令都会在 $apply 调用中执行关联的表达式。

这意味着点击表达式执行后,将开始一个$digest循环。在这个循环中,范围检查所有已注册的 $watch 表达式(例如包含 getData() 的双 curl 表达式)并调用监听器以防与以前的值(value)。

最后,正是这个摘要循环确保对所有绑定(bind)表达式进行求值。

关于javascript - Controller 函数中的 AngularJS 私有(private)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25576313/

相关文章:

javascript - 以有效的方式从对象数组更新 javascript 中的字典

javascript - 将 DATETIME 字符串转换为 Javascript 或 jQuery 中的时间和日期

javascript - 每行的 Ui-Grid 单选按钮选择

javascript - 应用程序之间的路由

javascript - 在 dojo 中将 UTC 或 BST 转换为本地用户时区

javascript - 当 Mocha 测试失败时,它会将一个对象记录到控制台

javascript - 在angular js中点击按钮重定向到页面

javascript - 连接 MEAN 堆栈的 A 和 M 组件 - 需要提示和指导

angularjs - 如何将默认端点添加到 Angular $http 请求之前?

javascript - 在 ReactJS 中的 Spotify API 上为 PKCE 身份验证创建代码验证器和质询