2014-11-25 62 views
0

我正在练习AngularJS,我想了解AngularJS是如何工作的。AngularJS是如何工作的?

,如果我们试图按照http://www.w3schools.com/angular/tryit.asp?filename=try_ng_controller

代码

<!DOCTYPE html> 
<html> 

<head> 
<script src= "http://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js"></script> 
</head> 

<body> 

<div ng-app="" ng-controller="personController"> 

First Name: <input type="text" ng-model="firstName"><br> 
Last Name: <input type="text" ng-model="lastName"><br> 
<br> 
Full Name: {{firstName + " " + lastName}} 

</div> 

<script> 
function personController($scope) { 
    $scope.firstName = "John", 
    $scope.lastName = "Doe"; 
alert('Angular'); 
} 
alert('JS'); 
</script> 

</body> 
</html> 

然后我们首先得到“JS”的警报,我们可以看到表情的全名还没有处理。 如果我们单击确定提示框,则会显示“Angular”的第二个提示,并且全名仍然需要处理。 但是,一旦我们为第二个警报框点击确定,全名表达式将立即得到处理。

我的问题是如何在控制器内部alert('Angular');后代码的流程返回到$scope.firstName = "John"$scope.lastName = "Doe";

+1

请尝试为“您的问题AngularJS的工作方式”设置一个更好的名称。 – hon2a 2014-11-25 12:26:14

+1

另外,请尝试阅读[一些文档](https://docs.angularjs.org/guide/controller),以确定您的控制器构造函数调用的时间。 – hon2a 2014-11-25 12:27:45

回答

2

模板更新发生在值更改后的第一个摘要循环中。

警报发生在同一个循环中,因此范围变量被更新,但模板并不是因为我们仍然在功能块内部(在功能之前尝试和更新外部东西没有任何意义完全评估)。警报阻止了脚本的进一步执行直到它被关闭,所以这就是为什么在模板更新之前似乎需要很长时间,而实际上它只是函数调用后的下一步。

我的问题是代码流如何返回到$ scope.firstName =“John”和$ scope.lastName =“Doe”;警惕之后('Angular');里面有一个javascript函数。

该流程永远不会“返回”,但只会更新范围变量值已更改的模板。正如我所说的,将警报框打开只是防止代码的进一步执行,一旦关闭它,函数调用就会结束,观察者启动一个新的摘要循环并更新模板。