2017-08-06 10 views
1

ディレクティブに渡す入力は、htmlファイル内に正しく表示されますが、typescriptファイル内の値は取得されません。 typescriptファイルの中でどのようにアクセスできますか?ここtypescriptファイル内のディレクティブの入力値を取得

は一例であり:

Iは次のようにtest-info.tsに定義されているディレクティブを有する:test-info.html内部

@Component({ 
selector: 'test-info', 
templateUrl: 'test-info.html' 
}) 
export class TestInfo { 
    @Input('location') location; 
    constructor(...) { 
    console.log('this.location: ' + this.location); //------> Prints null 
    } 

私が持っている:

{{location}} 

I内部このディレクティブを使用し別のhtml user.htmlファイル:

<test-info [location]='location'> </test-info> 

場所はuser.htmlに正しく表示されますが、.tsファイルのconsole.logコマンドではnullが出力されます。

編集: user.tsでは、ロケーションはAjaxコールで割り当てられます。おそらくこれがコンストラクタまたはngOnInit()がこの値を逃す理由です。しかし、それが更新されたらどうしたらいいですか?

+0

あなたは、コンストラクタでの入力を使用することができなかった、ためです。 'ngOnInit()'でこれらの入力にアクセスできます。ディレクティブのデータバインドされたプロパティが初めてチェックされ、その子がチェックされる直前に呼び出されます。ディレクティブがインスタンス化されると、一度だけ呼び出されます。 – alexmac

+0

私は 'ngOnInit()'と 'ngAfterViewInit()'と同じ結果を得ます。 – Ari

答えて

1

ngOnChangesフックを試してみてください。あなたが本当に正しい値を変更するなら、あなたはそのフックでそれを得るべきです。

ngOnChanges() { 
    console.log('this.location: ' + this.location); 
} 

もう一つの方法は、*ngIfでコンポーネントをラップしている:

<test-info *ngIf="location" [location]='location'> </test-info> 
+0

複数の非同期値があるので、これは私にとっては静かではありませんでした。私は非同期呼び出しをテスト情報ファイルに移動させることになりました。 – Ari

関連する問題