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

Why ng-init variable not overriden by controller?

我是 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-controller 首先被执行。