Angular6 - ngIf не уничтожает объект
У меня есть родительский компонент, который изменит форму ребенка, который передается как @Input()
когда кнопка нажата. я использую ngIf
для рендеринга дочернего компонента, но когда я нажимаю, чтобы изменить форму, дочерний компонент не уничтожается и не воссоздается.
parent.component.ts
form: FormGroup;
showChildForm: boolean;
num: number;
ngOnInit(){
this.showChildForm = false;
this.num = 1;
this.form = new FormGroup({group:{'name', new FormControl('name'+this.num,[])}})
}
changeForm(){
this.num += 1;
this.showChildForm = true;
this.form = new FormGroup({group:{'name', new FormControl('name'+this.num,[])}})
}
parent.component.html
<button (click)="changeForm()"></button>
<child *ngIf="showChildForm" [form]="form"></child>
child.component.ts
@Input() form: FormGroup;
child.component.html
<form [formGroup]="form">
<input type="text" [formControl]="form.get('name')"/>
</form>
1 ответ
Решение
Внутри changeForm вы не устанавливаете this.showChildForm снова в false.
Попробуйте сделать это:
changeForm(){
this.num += 1;
this.showChildForm = false;
setTimeout(() => {
this.showChildForm = true;
this.form = new FormGroup({group:{'name', new FormControl('name'+this.num,[])}})
})
}
Надеемся, что его выключение и повторное включение в следующем цикле тиков (с помощью setTimeout) приведет к уничтожению и повторному созданию компонента.
У меня была аналогичная проблема. На мой взгляд, используяchangeDetector
элегантнее, чем setTimeout
constructor(private changeDetector: ChangeDetectorRef){}
changeForm() {
this.num += 1;
this.showChildForm = false;
// now notify angular to check for updates
this.changeDetector.detectChanges();
// change detection should remove the component now
// then we can enable it again to create a new instance
this.showChildForm = true;
this.form = new FormGroup({group:{'name', new FormControl('name'+this.num,[])}})
}