为什么控制器没有覆盖ng init变量

Why ng-init variable not overriden by controller?

本文关键字:ng init 变量 覆盖 控制器 为什么      更新时间:2023-09-26

我是angular的新手。

为什么我的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";
}]);

我的指令是:

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

输出始终为:

Emmad

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

问题:
1-为什么不是"zahid"?
2-如果我在上设置断点

$scope.name = "Zahid";

我在$scope中没有看到"name"变量,为什么?

感谢@Pankaj Parkar提供的详细答案,下面是答案的摘录。

从技术上讲,发生的情况是在注册ng-controller函数之后对ng-init指令进行求值。这就是为什么ng-init的初始化值在控制器内不可用的原因。

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