2つの配列を持つコンポーネントがあります。 arrayA
およびarrayB
。 arrayB
には、フィルタリングされた要素arrayA
が含まれています。そして、テンプレートに:私はarrayB
を更新するためにarrayA
に対してフィルタメソッドを使用しdoSomething
方法で角2:配列が更新されたときにビューが更新されない
<button (click)="doSomething()">Do Something</button>
:
<div *ngFor="let elem of arrayB">{{elem.something}}</div>
私もボタンがあります。
doSomething() {
this.arrayB = this.arrayA.filter(elem => { return ***some code***; });
}
問題はビューが更新されないことです。 NgZone(ngZone.run():メソッドでコードをラップしました)とChangeDetectorRef(detectChanges()/ markForCheck():メソッドの最後にこれを呼び出しました)。
これを解決するにはどうすればよいですか?
pls 'console.log(this.arrayB)'最後に 'doSomething' funcで実際に相違があるかどうかを確認 – Dhyey
ボタンのクリックイベントが同じテンプレート内で発生した場合は、 ngForとして。あなたがAngularに伝える必要があるのは、それがチェンジツリーの外にあるか、チェックされた後に変更された場合だけです。たぶん、問題は、arrayBが変更する必要があると思ったときに変更されていないということです。 – cgTag
@Dhyey 'console.log(arrayB)'で配列をチェックした後、私は奇妙なことに気付きました: 'doSomething()'が2回発生します。初めて 'arrayB'は正しい(フィルターにかけられました)が、2回目に...元のものです。私の '(クリック)'は次のようになります: '(クリック)=" foo &&!foo.bar && doSomething() "。だから私は問題がこれらの「条件」だと思う。 –