代码很简单:
<!doctype html> <html ng-app="plunker" > <head> <meta charset="utf-8"> <title>AngularJS Plunker</title> <script>document.write("<base href=\"" + document.location + "\" />");</script> <link rel="stylesheet" href="style.css"> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/angular.js"></script> </head> <body ng-controller="MainCtrl"> Hello {{name()}}! </body> </html> <script> var app = angular.module('plunker', []); app.controller('MainCtrl', function($scope) { $scope.name= function() { console.log("---name---:" + new Date()); return "Freewind"; }; }); </script>
您会看到这里有一个name函数,我们只在体内调用它一次。但是在控制台中,它打印两次---name---::
name
---name---:
---name---:Wed Feb 20 2013 14:38:12 GMT+0800 (中国标准时间) ---name---:Wed Feb 20 2013 14:38:12 GMT+0800 (中国标准时间)
您可以在此处观看现场演示:http : //plnkr.co/edit/tb8RpnBJZaJ73V73QISC?p=preview
为什么该函数name()已被调用两次?
name()
在AngularJS中,用大括号括起来的任何东西都是一个在摘要循环 中至少 被求值 一次 的表达式。 __
AngularJS的工作方式是连续运行摘要循环,直到没有任何变化为止。这样可以确保视图是最新的。自调用函数以来,它运行一次以获取值,然后运行第二次以查看没有任何变化。在下一个摘要周期,它将至少再次运行。
name出于这个原因,通常只从模板中调用幂等方法(例如)是一个好主意。