【发布时间】:2019-10-28 01:43:28
【问题描述】:
我有一个反应形式。设置与此类似:
myForm: FormGroup;
this.myForm= new FormGroup({
name: new FormControl("", [Validators.required, Validators.maxLength(15), Validators.pattern('...')]),
...
});
我在我的表单上这样使用它:
<input
type="text"
formControlName="name"
/>
<div *ngIf="name.errors?.required">
Name is required
</div>
<div *ngIf="name.errors?.maxlength">
Name must be {{ name.errors.maxlength.requiredLength }} characters
</div>
<div *ngIf="name.errors?.pattern">
Name has invalid characters.
</div>
这只是我的表格的精简版。我有多个输入,我必须为每个输入创建错误 div。
为了解决这个问题,我尝试创建一个组件。该组件与上面的代码非常相似:
<input
type="text"
[formControlName]="formControlName"
/>
<div *ngIf="name.errors?.required">
Name is required
</div>
etc...
ts 文件:
@Component({
selector: 'app-text',
templateUrl: './text.component.html'
})
export class TextComponent {
@Input() formControlName: FormControl;
}
所以在我的表单上,我想按如下方式使用这个组件:
<app-text [formControlName]="name"></app-text>
但我无法让它与 formControlName 属性一起使用。
这可能吗?
谢谢
我快到了。
我已经创建了这个 StackBlitz,所以请展示我的进度:
现在只是在努力解决错误以及如何访问 formControl 以检查这些错误
【问题讨论】:
-
为什么要在 TextComponent 中使用 formControl?
-
所以我可以使用验证器来显示组件中的错误,从而不会在任何地方重复它们
-
你能提供stackblitz吗?
-
您需要为此使用自定义值访问器。如果你想避免使用样板,你可以使用github.com/cloudnc/ngx-sub-form在这里查看类似的帖子stackoverflow.com/questions/40806779/…
-
@maxime1992,不,如果您不想创建自定义表单控件,则不需要使用值访问器。只要通过控制
标签: angular angular-reactive-forms angular-components controlvalueaccessor