Angular: получить NgForm в проецируемом контенте
Допустим, у меня есть такой компонент, как показано ниже:
<app-my-typical-form>
<app-child-in-content></app-child-in-content>
</app-my-typical-form>
где my-typical-form.component.html
является:
<form #f="ngForm">
<ng-content></ng-content>
</form>
<hr>
<h3>Here is my form from the parent:</h3>
{{f|json}}
а также child-in-content.component.html
а также child-in-content.component.ts
следующие:
<h2>
My Form from the projected content is:
</h2>
<br>
{{myForm|json}}
@Component({
selector: 'app-child-in-content',
templateUrl: './child-in-content.component.html',
})
export class ChildInContentComponent {
constructor(@Optional() public myForm: NgForm) { }
}
Как вы можете видеть здесь, в StackBlitz,myForm
в app-child-in-content
нулевой. Однако я понимаю, что посколькуchild-in-content
является (родным) ребенком NgForm
Я могу получить его через DI. По-видимому, это не работает из-за проекции контента.
Итак, есть ли способ получить NgForm в app-child-in-content
компонент (EDIT: доViewInit
)?
1 ответ
Вот ваша разветвленная ссылка на StackBlitz
Сначала вам понадобится ссылка на NgForm с использованием декоратора @ViewChild().
Ваш App.Component.ts...
@ViewChild(ChildInContentComponent, {static:true})
private wizardComponent: ChildInContentComponent;
@ViewChild(MyTypicalFormComponent, {static:true})
private TypicalForm: MyTypicalFormComponent;
ngAfterViewInit(){
this.wizardComponent.myForm = this.TypicalForm.wizardComponent
}
Ваш типичный Form.component.ts добавляет это...
@ViewChild('f', {static:true}) wizardComponent;