2017-12-01 8 views
0

2番目のサービスを呼び出すための明確な説明があります。次のプログラムを考えてみましょう:ngInitでAngular 2アプリケーションでサービスを呼び出す

我々は ngOnInitでサービスを呼び出す必要が親指のルールを持っていないのはなぜ
@Component({ 

providers : [EmployeeService] 
}) 
export class Employee implements OnInit { 

    employees : IEmployee[]; 

    constructor(private _employeeService: EmployeeService) 
    { 
    } 

    ngOnInit() 
    { 
    this.employees = this._employeeService.getEmployees(); 
    } 

} 

、通常、他のプログラミング言語で、我々はときにのみ機能におけるデータのためのサービスを呼び出すことになります私たちは必要です。

しかし、ここでは必要な場合もありますが、データはすでにサービスから取得されています。なぜそれが起こっているのですか?

+1

このようなルールはありません。必要なときにのみ呼び出します。イディオムは、 'constructor'ではなく' ngOnInit'でそれを呼び出すことです。これは、特定のフレームワークサービスとそれらの依存関係にとって重要です。 –

+1

コンストラクタまたは 'ngOnInit'の呼び出しは、コンストラクタのコードがテストするのが難しいため、サービスに渡す必要がある値がコンストラクタでまだ使用できないことがあるためです。 –

+0

コンストラクタでは、 'html template'はまだビルドされていません。直接のDOM操作を使用する場合は、 'ngOnInit'または' ngAfterViewInit'の間にデータを取得することをお勧めしますが、そのようなルールはありません。任意のライフサイクル(DOMラッパー、つまり 'ViewChild'のほかに)でクラスプロパティを設定することができます。 –

答えて

1

あなたは、角のライフサイクルフックngOnInitを理解していれば、そのはすぐにコンポーネントを作成した後 呼び出されます:

テンプレートで最初にいくつかのデータを表示する必要がある場合は、データをフェッチするサービスはngOnInitの内部に配置されています

関連する問題