如何在 angular 4 中使用 ng-content 添加 [disabled]='!f.valid' 以提交按钮?
How to add [disabled]='!f.valid' to submit button using ng-content in angular 4?
有一个包含电子邮件、密码字段和提交按钮的表单组件通过 ng-content 传递,以便可以显示登录表单 'Login' 按钮和注册表单 'Register' 按钮显示。表单组件模板代码:
<form #f="ngForm" (ngSubmit)="onSubmit(f.value)">
<div class="form-group">
<label for="email">Email</label>
<input type="email"
class="form-control"
placeholder="Enter email address"
name="email"
ngModel
>
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password"
class="form-control"
placeholder="Enter the password"
name="password"
ngModel
>
</div>
<ng-content select="[submitbtn]" ></ng-content>
表单父组件代码:
<div class="row">
<div class="col-md-6">
<!--For Login-->
<app-form-content>
<button type="submit" class="btn btn-default" submitbtn>Login</button>
</app-form-content>
</div>
<!--For register-->
<div class="col-md-6">
<app-form-content>
<button type="submit" class="btn btn-default" [disabled]="!f.valid" submitbtn>Register</button>
</app-form-content>
</div>
</div>
在 运行 之后出现此代码 "TypeError: Cannot read property 'valid' of undefined" 错误。如何解决这个错误?
您不能在父模板中使用 template reference variable #f
,因为它的范围是声明它的整个模板。
为了在父模板中访问此变量,我建议您在表单组件中声明 属性:
@ViewChild('f') f: NgForm;
之后,您可以从父模板参考 #formContent
中获取此 属性,例如:
<app-form-content #formContent>
<button type="submit" class="btn btn-default" [disabled]="!formContent.f.valid"
有一个包含电子邮件、密码字段和提交按钮的表单组件通过 ng-content 传递,以便可以显示登录表单 'Login' 按钮和注册表单 'Register' 按钮显示。表单组件模板代码:
<form #f="ngForm" (ngSubmit)="onSubmit(f.value)">
<div class="form-group">
<label for="email">Email</label>
<input type="email"
class="form-control"
placeholder="Enter email address"
name="email"
ngModel
>
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password"
class="form-control"
placeholder="Enter the password"
name="password"
ngModel
>
</div>
<ng-content select="[submitbtn]" ></ng-content>
表单父组件代码:
<div class="row">
<div class="col-md-6">
<!--For Login-->
<app-form-content>
<button type="submit" class="btn btn-default" submitbtn>Login</button>
</app-form-content>
</div>
<!--For register-->
<div class="col-md-6">
<app-form-content>
<button type="submit" class="btn btn-default" [disabled]="!f.valid" submitbtn>Register</button>
</app-form-content>
</div>
</div>
在 运行 之后出现此代码 "TypeError: Cannot read property 'valid' of undefined" 错误。如何解决这个错误?
您不能在父模板中使用 template reference variable #f
,因为它的范围是声明它的整个模板。
为了在父模板中访问此变量,我建议您在表单组件中声明 属性:
@ViewChild('f') f: NgForm;
之后,您可以从父模板参考 #formContent
中获取此 属性,例如:
<app-form-content #formContent>
<button type="submit" class="btn btn-default" [disabled]="!formContent.f.valid"