46

angular 1 では、この方法で 1 回のバインドを行うことができました{{ ::myFunction() }}

angular 2では、これは投げています:

EXCEPTION: Template parse errors:
Parser Error: Unexpected token : at column 2 in [{{ ::consent(false, undefined, box) }}] in CookieConsent@5:29 ("ull-right" href="" (click)="consent(true, $event, box)">De acuerdo</a>
        <span class="hidden">[ERROR ->]{{ ::consent(false, undefined, box) }}</span>

angular2でワンタイムバインディングを行うにはどうすればよいですか?

4

7 に答える 7

5

現在、Angular 2 で 1 回限りのバインディングを行うことはできません。ただし、バインディングがいつ変更されたかを知り、入力をリセットすることはできます。

Angular 2 は、同じために OnChanges ライフサイクル フックを提供します。変更を取得するには、OnChanges インターフェイスを実装する必要があります。

以下のコード例を参照してください。ここでは、OnInit が呼び出されたときにデータ バインド プロパティをプライベート変数に格納しています。

export class Footer implements OnInit, OnChanges {
  @Input() public name: string;
  private privname: string;

  constructor() { }

  ngOnInit() {
    this.privname = this.name;
  }


  ngOnChanges(changes: { [key: string]: SimpleChange }): void {
    if (!changes["name"].isFirstChange()) {
        this.name = this.privname;
    }
  }
}

後で他の変更が発生したときに、その後の変更で値を古い値に設定しています。

このメカニズムは、ワンタイム バインディングのように機能します。

代替ソリューション: setter 関数を使用して変更をキャプチャすることもできます。

于 2016-02-18T03:31:05.580 に答える