2017-12-22 3 views
1

私はほとんどのコントローラで初期化関数init()を使用してコントローラ固有の変数を設定しています。私はほとんどのコントローラでこれをやっていることを知っているので、これは一般的だと仮定していますが、ドキュメントは見つかりません。私はオプションを見てのとおり、次のようにされていますAngularJSはコントローラの変数を初期化します

  1. 休暇を
  2. 利用の実行またはプロバイダサービス

    (function() { 
    
    'use strict'; 
    
    CompanyController.$inject = ['CompanyFactory','LocationService']; 
    function CompanyController(CompanyFactory,LocationService) { 
    
        let vm = this; 
    
         // Initialize function 
        function init() { 
         vm.company = { 
          solutions: CompanyFactory.getSolutions(), 
         }; 
         // set $location 
         LocationService.setLocation('company-page'); 
        } 
    
        init(); 
    
    } 
    
    angular.module('app.company', []) 
        .controller('CompanyController', CompanyController) 
    
    
    })();       
    
+0

何が欲しいですか?もっと説明してください。 –

+0

オプションはありません。私は信じています。各コントローラでinit()呼び出しを行う必要があります。 –

答えて

2

コントローラlifecycle hooksがあるようAngularJS 1.5で導入されました。 $onInitフックはまさに​​この役を演じることになっている:

this.$onInit = function() { ... } 

$onInitフックは事前リンク機能に代わるものです。これはコンパイラによって実行されます。 コントローラがディレクティブに属していない場合(ng-controllerもディレクティブ)、ルートコントローラのように$controllerで直接インスタンス化されます。この場合、this.$onInit()はコンストラクターで明示的に呼び出される必要があります。

元のスニペットfunction init() {...}は重要な役割を果たしていないことに注意してください。メソッドとして公開されていないので、コントローラをよりテスト可能または拡張可能にすることはできません。

+0

コントローラにないコンポーネントに関連しています。 –

+1

@ SlaveUtesinovライフサイクルフックは、A2に向けてのステップとして導入されました。これはコンポーネントではなく、* compiler *固有のものです。ライフサイクルフックは、コンポーネントがその恩恵を最も受けるため、コンポーネントのセクションに記載されています。 – estus

+0

@estusありがとう! btw、簡潔にするためにコントローラーに機能を置いただけです – Nolan

関連する問題