控制器不会更改fullName的值

时间:2015-09-02 11:33:44

标签: angularjs

<!DOCTYPE html>
<html >
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<script>
var app= angular.module('myApp',[]);
app.controller('myController',function($scope){


  $scope.fullName = 'Test'
})
</script>
<body>

<div ng-app="myApp" ng-controller="myController " ng-init="fullName='Khanh'">



 <p>Full name is {{fullName}}</p>

</div>

</body>
</html>
  1. 首先,我使用ng-init创建了一个应用程序varible fullName。
  2. 我使用controller myController来更改应用程序变量(fullname)

  3. 我预计结果是

  4. 全名是Test

    但它是

    全名是Khanh

    我哪里错了?

2 个答案:

答案 0 :(得分:1)

控制器初始化后运行

ng-init,因此它可以访问其变量(并可以覆​​盖它们)。

As per the docs,您使用ng-init错误:

  

ngInit的唯一合适用途是用于别名ngRepeat的特殊属性,如下面的演示所示。除了这种情况,您应该使用控制器而不是ngInit来初始化作用域上的值。

答案 1 :(得分:0)

您应该在调用控制器时初始化变量,但如果您真的想要,可以创建一个将由ng-init调用的函数,如:

<script>
var app= angular.module('myApp',[]);
app.controller('myController',function($scope){

  $scope.fullName = 'Test'

  $scope.init = function(name){
    $scope.fullName = name;
  }
});
</script>

然后在你的ng-init中调用它:

<div ng-app="myApp" ng-controller="myController " ng-init="init('Khanh')">

执行代码的顺序如下:

  • 调用ng-controller时初始化控制器(因此将设置控制器根范围中的所有字段)
  • 初始化控制器后,在这种情况下,将调用ng-init,并覆盖fullName的值

它基本上回归到以合乎逻辑的方式思考这些事情:如何设置字段的值是否必须声明(并初始化)?它不能,因此,必须先对该字段进行初始化,然后才能像这样使用。