2017-08-09 4 views
1

に属性値、のは、私は次のディレクティブを持っているとしましょう:私はこれをレンダリングする場合this.xはそのを取得するため設定および更新するディレクティブ内の角度@HostBindingを使用すると、だから、ホスト

<div foo></div> 

import { Directive, HostBinding } from '@angular/core'; 

@Directive({ 
    selector: '[foo]' 
}); 

export class FooDirective { 
    x: number; 

    constructor() { 
     this.x = 100; 
    } 

    @HostBinding('style.left.px') 
    styleLeftPx: number = this.x; 
} 

ようですが、動作しないように見えます@HostBindingの後の値が初期化されました。

ので、より多くのこのような何かに上記の変更:

... 

x: number = 100; 

constructor() {} 

... 

そしてコンストラクタの外でその値を設定し、値が無い問題に追加されます。しかし

、私はタイムアウトで、たとえば、任意の時点でその値を変更しようとします

... 

x: number = 100; 

constructor() { 
    setTimeout(() => { 
     this.x = 200; 
    }, 2000) 
} 

... 

ホスト属性が新しい値に更新されません。最初のinitの後にここにデータバインディングはありませんか?ここでは、多くの回答は、スタックの上で@HostBindingを使用してattrの初期値を設定する方法について議論していますが、initの後にその値を変更するのはどうですか?

答えて

2

どこが間違っているのか分かりました。

それはこのようにする必要があります:私はこのアプローチを囲む構文を誤解されたよう

<div foo></div> 

import { Directive, HostBinding } from '@angular/core'; 

@Directive({ 
    selector: '[foo]' 
}); 

export class FooDirective { 
    @HostBinding('style.left.px') 
    x: number = 100; 

    constructor() { 
     setTimeout(() => { 
      this.x = 200; 
     }, 2000); 
    } 
} 

が見えます。

関連する問題