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