我是 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/