我是棱角分明的新人。
为什么我的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'变量为什么?
答案 0 :(得分:0)
感谢@Pankaj Parkar详细回答here,以下是答案的摘录。
从技术上讲,发生的事情是在ng-controller
函数注册后评估ng-init指令。这就是控制器内部ng-init
的初始值不可用的原因。
基本上,首先调用ng-controller
的原因是优先级。如果你看一下优先级,ng-init
指令就有450&amp;指令的优先级选项,其中ng-controller指令有500,而从DOM编译指令AngularJS按优先级对它们进行排序。因此,首先执行ng-controller。