2017-11-30 19 views
0

私はマテリアルデザインと角度5を使用しています。マテリアルローダーを使用しようとしていたので、ナビゲーションを開始するときにローダーを表示し、終了時にローダーを取り除くときはthis questionになりました。私はViewChild returns undefined

<mat-progress-bar #spinnerElement [mode]="'indeterminate'" [color]="'primary'"></mat-progress-bar> 

viewchildを試してみましたが、以下のように私のコンポーネントのコンストラクタで呼び出さ:

@ViewChild('spinnerElement') 
spinnerElement: ElementRef; 

constructor(
..... 
    private ngZone: NgZone, 
    private renderer: Renderer) { 
     console.log(this.spinnerElement, 'spinnerElement'); 
    } 

しかし、コンソールは常にundefinedを返します。 Angularの新しいビット。なぜ、みんな?

答えて

1

角度life cycleを見てください。

まだレンダリングされていないため、コンストラクタ内のDOM要素にアクセスすることはできません。

ngOnInit()の 'spinnerElement'にアクセスしてみてください。

ngOnInit():

は角最初の表示後 データ結合特性を指令/コンポーネントを初期化し、指令/コンポーネントの入力 プロパティを設定します。最初のngOnChanges()の後に1回呼び出されます。

1

@ViewChildngOnInit()にアクセスしてください。初期化する前に使用することはできません。

+0

いいえ、ngOnInitでは使用できません。少なくともngAfterViewInit()を待つ必要があります。 – Gnujeremie