为什么ng-init变量不被控制器覆盖?

时间:2015-11-07 06:21:51

标签: javascript angularjs controller ng-init

我是棱角分明的新人。

为什么我的ng-init变量没有覆盖控制器?

<div ng-init="name='Emmad'" ng-controller="TodoController as todoCtrl" >
     <my-name></my-name>
</div>

我的控制器是:

App.controller('TodoController',['$scope',function($scope){
    $scope.name = "Zahid";
}]);

我的指示是:<​​/ p>

App.directive('myName',function(){
    return {
        restrict: 'EA',
        template: '<b>{{name}}<b>'
    }
});

输出始终为:

Emmad

它应该是'zahid'因为我在控制器中使用该指令而控制器将覆盖名称变量。

问题:
1 - 为什么它不是'zahid'?
2 - 如果我把断点放在

$scope.name = "Zahid";

我在$ scope中看不到'name'变量为什么?

1 个答案:

答案 0 :(得分:0)

感谢@Pankaj Parkar详细回答here,以下是答案的摘录。

从技术上讲,发生的事情是在ng-controller函数注册后评估ng-init指令。这就是控制器内部ng-init的初始值不可用的原因。

基本上,首先调用ng-controller的原因是优先级。如果你看一下优先级,ng-init指令就有450&amp;指令的优先级选项,其中ng-controller指令有500,而从DOM编译指令AngularJS按优先级对它们进行排序。因此,首先执行ng-controller。