12

私はAngularは初めてですが、そのアプローチを本当に楽しんでいます。ng-init要素内で変数を初期化するHTMLファイルがあり、そこでディレクティブ<div>を使用してコントローラーも宣言しています。ng-controller

<div ng-controller="myCtrl" ng-init='foo="bar"'>

console.logコントローラ スクリプトからの$scopeオブジェクトの場合foo、他のプロパティの一覧にあるプロパティを確認できますが、同じスクリプトからそれにアクセスしようとすると、undefined. 私もBatarang<div>を使用しており、プロパティも含む -scopeのモデルが表示されfooます。

Pass variables to AngularJS controller, best practice?に対する 2 番目の回答から知っていますか? ng-initディレクティブをouterに移動することで問題を解決できると思いますが<div>、舞台裏で実際に何が起こっているのか知りたい. 事前に感謝します。

編集

要素内のディレクティブの順序は重要でdivはありません。ng-initが前に指定されていても、問題はまだ存在しますng-controller

4

3 に答える 3

2

コントローラーが最初に作成され、次に foo=bar が設定されます。

これが意味することは、コントローラーのコードには foo がまだ存在しないということです。ただし、デバッグ時には既に作成されています。

ここに回避策がありますが、これは本当にハックだと思います。 AngularJS の $scope で ng-init に設定された変数が未定義なのはなぜですか?

これを修正する角度のある方法は、データをビューに入れることではありません。データは、モデル、コントローラー、またはサービスに属します。これは、関心の分離を有効に保つためです

于 2013-09-11T02:13:35.257 に答える
1

回避策は、ng-init の関数を使用することです。

<div ng-app>
    <div ng-controller="MyCtrl" ng-init="init('kittens')">
        Page title is {{ pageTitle }}
    </div>
</div>

コントローラ:

var MyCtrl = function($scope) {   
    $scope.init = function(pageTitle) {
        $scope.pageTitle = pageTitle;
    }
};

私は ng-init を使用してコントローラーのタイプを指定してきました。つまり、コントローラーはアプリケーションで何度も使用されますが、毎回異なる情報が必要になります。タイプごとに個別のコントローラーを作成する手間が省けます。

関連する質問:

AngularJS の $scope で ng-init に設定された変数が未定義なのはなぜですか?

ng-init でスコープ プロパティを設定するには?

于 2014-09-19T01:26:15.200 に答える