2017-06-22 2 views
1

私のAngularJSアプリでは、いくつかの値を初期化する必要があります。init()コールまたはng-initでデータを初期化しますか?

私はこの目的のために関数init()を書きました。

function init() { 
    this.var = 'example'; 
} 

それは私のJSスクリプトの最後に、またはng-init属性でinit機能を呼び出すことが良くですか?

ソリューション1

/* script.js */ 
function init() { /* instructions */ } 
init(); 

ソリューション2

/* script.js */ 
function init(){ // instructions // }} 
// Not calling init() here 

<!-- file.html --> 
<div ng-controller="exampleCtrl as example" ng-init="example.init()"> 
+0

解決策1は 'ng-init'よりも優れています – Akashii

+0

**なぜ**を**説明できますか? – Zooly

+0

https://docs.angularjs.org/api/ng/directive/ngInit。あなたはドキュメントでそれを見ることができます – Akashii

答えて

1

このディレクティブは、 、テンプレートにロジックの不必要な量を追加するを乱用することができます。以下のデモ に見られるように、ngRepeatのエイリアシング特殊プロパティと同様に、ngInitの適切な使用方法はごくわずかです( )。サーバー側のスクリプトを使用してデータを注入するためのものです。 少数のケースのほかに、の の値を初期化するには、ngInitではなくコントローラを使用する必要があります。

選択肢がある場合は、常にコントローラで初期化することをお勧めします。解決策1が優れています。


より広範に、separation of concernsの面で、私はあなたのコントローラ内でロジックを記述するためにアドバイスでしょう。複数のコントローラで共通のコードを使用している場合は、サービスに移動します。これは、成長するときのアプリケーションの保守性を大幅に簡素化します。

+1

それは明らかです!ありがとうございました – Zooly

+0

@Zoolyよろしくお願いします!私は助けて嬉しい:) – Mistalis

+1

そして、あまりにも編集のためのありがとう^^ – Zooly

1

これは、それらを使用してページの準備ができていくつかの値を初期化しようとしている場合は、コントローラを使用しているはずだ、正しいです?だから、使用し、この方法で構築されたが... $onInit()と呼ば

$onInit() { 
    $scope.foo = 'some value'; 
    // Initialise other variables; 
} 

$onInit()は、コンポーネントコントローラのためのAngularJS 1.5で追加されましたが、それはすべてのコントローラで動作します。 ngInit docsから

関連する問題