0

私は角度が初めてです。

私の 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-なぜ「ザヒード」ではないのですか?
2-ブレークポイントを設定した場合

$scope.name = "Zahid";

$scope に 'name' 変数が表示されないのはなぜですか?

4

1 に答える 1

0

ここで詳細な回答をしてくれた@Pankaj Parkarに感謝します。以下は回答の抜粋です。

ng-controller技術的には、関数が登録された後に ng-init ディレクティブが評価されるということです。そのため、 からの初期化された値ng-initはコントローラー内では使用できません。

基本的には先に呼ばれた理由ng-controllerが優先です。優先度を見ると、ng-initディレクティブには450とディレクティブの優先度オプションがあり、ng-controllerディレクティブには500があり、DOM AngularJSからディレクティブをコンパイルすると、優先度に従ってそれらがソートされます。したがって、ng-controller が最初に実行されます。

于 2015-11-07T06:43:30.507 に答える