子コンポーネントを完全に再読み込みできる必要があります。これを実現する最善の方法は、単純な*ngIf
をブール値で使用することです。子コンポーネントの破棄と再ロード
<app-child *ngIf="enabled"></app-child>
しかし、それだけでこれを行うことはすぐに再初期化/コンポーネントを削除するには十分ではないようです。つまり、コンポーネントを削除するにはfalseを設定し、それを再初期化するには、trueに設定されむしろ
reloadTree(){
this.enabled = false;
this.enabled = true; // doesn't work- child ngOnInit isn't called
}
、私はそれが動作する前にsetTimeout
を使用する必要があります。
reloadTree(){
this.enabled = false;
const self = this;
setTimeout(function(){
self.enabled = true;
}, 1);
}
私は、これは角度がテンプレートをレンダリングする方法で行うことですね?これは非常に優雅ではない - 誰も私がここでやろうとしていることを達成するためのより良い方法を提案することができますか?ありがとう
なぜ最初にリロードする必要がありますか?それは設計上の問題のようです。代わりに、おそらくそれを別の入力に渡すか、または観測対象から放出されたイベントに反応させるべきです。 –
フラグ切り替えの間に角度変化検出を積極的に行う必要があるかもしれません。この[ChangeDetectionRef](https://angular.io/api/core/ChangeDetectorRef)はここで役立ちます。それを挿入し、 'this.ref.detectChanges'を呼び出します。 –
私はそれが少しハックだと認めます。ここに入る価値はありませんが、私は特定の問題を抱えている日々を過ごしましたが、これを回避する唯一の方法と思われます。 @ BenediktSchmidt-ありがとう、あなたは精巧にできますか? – Inigo