【发布时间】:2019-03-01 21:25:34
【问题描述】:
我有一个名为 auth 的父组件。在这个组件中,我有一个 ng-template,它是一个代表登录/注册表单的表单,如下所示:
`<ng-template #authForm>
<form [formGroup]="authForm" (ngSubmit)="onSubmit()">
<mat-form-field>
<input matInput placeholder="Username" formControlName="userName" >
<mat-error *ngIf="postForm.get('userName').invalid">You must enter a value</mat-error>
</mat-form-field>
<mat-form-field>
<input matInput placeholder="E-mail" formControlName="email" >
<mat-error *ngIf="postForm.get('email').invalid">You must enter a value</mat-error>
</mat-form-field>
<mat-form-field>
<input matInput placeholder="Password" formControlName="password" type="password">
<mat-error *ngIf="postForm.get('password').invalid">You must enter a value</mat-error>
</mat-form-field>
</form>
</ng-template>`
在同一个父组件中,我使用角材质mat-tab-group组件来显示登录组件或注册组件:
`<mat-tab-group (selectedTabChange)="onSignup($event)">
<mat-tab label="Login">
<ng-container *ngIf="!isSignup">
<app-login [loginForm]="authForm"></app-login>
</ng-container>
</mat-tab>
<mat-tab label="Sign Up">
<ng-container *ngIf="isSignup">
<app-signup></app-signup>
</ng-container>
</mat-tab>
</mat-tab-group>`
在子组件上,例如 LoginComponent。我有一个@Input() loginForm: TemplateRef<any>。每当我尝试渲染传入的模板时,什么都不会显示,我不知道为什么这不起作用:
`<ng-container
*ngTemplateOutlet="loginForm">
</ng-container>`
【问题讨论】:
-
可能是
*ngIf="!isSignup"这个flag,检查app-login的ngOnInit是否被调用 -
是的,我在 LoginComponent 内的 ngOnInit 中有一个日志,它被调用了。当我不将任何模板传递给子组件时,它们渲染得很好。在登录和注册之间切换按预期工作。但是一旦我尝试向下传递一个元素,它就会停止工作。
-
你能重现堆栈闪电战吗?
-
正在处理中。
-
stackblitz.com/edit/angular-nbt54q - 这是我对表单的基本设置
标签: angular