この質問と同様の問題がありますが、2つの回答のどちらもうまくいかないため、質問が古くなっているようです。
子コンポーネントは、入力として渡された複雑なオブジェクトからデータをレンダリングするだけですProposal
(ユーザー コントロールはまったくないため、イベントを発生させたり、何かを渡したりする必要はありません)。
@Component({
selector: 'fb-proposal-document',
templateUrl: './proposal-document.component.html',
styleUrls: ['./proposal-document.component.css']
})
export class ProposalDocumentComponent implements OnInit, OnDestroy {
@Input() proposal: Proposal;
constructor()
}
テンプレートの関連部分は次のとおりです。配列を反復し、プロパティをチェックして、次を使用して異なるテキストを表示します*ngIf
。
<li class="section" *ngFor="let qp of proposal?.quoted_products">
<li class="section" *ngFor="let room of qp?.rooms">
...
<div class="row">
<div class="col-md-12">
Supply
<span *ngIf="room.is_fitted">
and install
</span>
<span *ngIf="!room.is_fitted">
only
</span>
</div>
</div>
...
</li>
</li>
親で、ユーザーはチェックボックスをクリックして「is_fitted」を true または false に変更できます。親はドメイン ドライブ フォームを使用しています。親のngOnInit
には、次のコードがあります。
this.myForm.controls['isFitted'].valueChanges.subscribe(
value => {
this.proposal.is_fitted = value;
let qp = this.proposal.quoted_products[this.qpCurrentIndex];
qp.rooms.forEach(function(room) {
room.is_fitted = value;
});
}
);
プロパティを正しく更新します。私はそれを見ることができますconsole.log
。*ngIf
問題は、埋め込まれたroom.is_fitted
値が変更されたときに、子に再起動/再処理させるにはどうすればよいですか?
ViewChild を使用してこのアイデアを実装しようとしたので、ngOnInit の上記のコードは次のようになります。
this.myForm.controls['isFitted'].valueChanges.subscribe(
value => {
this.proposal.is_fitted = value;
let qp = this.proposal.quoted_products[this.qpCurrentIndex];
qp.rooms.forEach(function(room) {
room.is_fitted = value;
});
this.proposalDocument.notifyChange(this.proposal);
}
);
しかし、それもうまくいきません。子のnotifyChangeが正常に呼び出されました:
notifyChange(proposal: Proposal) {
console.log('I changed');
this.proposal = proposal;
}
ビューは更新されません -*ngIf
ロジックは再処理されません。