2015-11-07 83 views
0

我是新來角。爲什麼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"; 
}]); 

和我的指令是:

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

輸出始終是:

Emmad 

它應該是 '扎希德' 因爲我我在控制器和控制器中使用指令wi會覆蓋名稱變量。

問題:
1 - 爲什麼它不是'zahid'?
2,如果我把斷點

$scope.name = "Zahid"; 

我沒有看到在$範圍爲什麼「名稱」變量?

+0

http://stackoverflow.com/questions/17104639/ng-init-ng-controller-strange-behavior-in-the-controllers-scope –

+2

你需要看看這個答案http://stackoverflow.com/ a/33285651/2435473我在那裏提到'ng-init'的工作原理 –

+1

所以它的優先級是重要的。謝謝! –

回答

0

感謝@Pankaj Parkar的詳細答案here及以下是答案的摘錄。

從技術上講,發生了什麼事是在ng-controller函數被註冊之後,ng-init指令被評估。這就是爲什麼ng-init的初始值在控制器內不可用。

基本上,ng-controller首先被調用的原因是優先級。如果您查看優先級,則指令的優先級選項是ng-init指令,其中ng-controller指令的優先級爲500,而編譯來自DOM的指令AngularJS會按照優先級對它們進行排序。因此ng-controller首先被執行。