【发布时间】:2019-12-30 20:40:05
【问题描述】:
我创建了一个 Angular 响应式表单,其中标签将通过权限切换。我想通过创建一个组件来处理这些语义切换,该组件负责将数据作为@Input() 并呈现特定的输入标签。处理这个问题的正确方法是什么?
有一个父master-form.component,其中包含'formGroup'和一个名为input-switch.component的子组件。我通过@Input() 将特定参数传递给子组件。子组件由字段值和 formControlName 组成,用 ngIf 切换。
这里是 master-form.component html -
<form class="master-form" [formGroup]="masterForm" (ngSubmit)="submitData(masterForm)">
<label>My first field: </label>
<input-switch [setting]="'change'" [labelVal]="'first field value'" [formCtrl]="'firstField'">
</input-switch>
<label>My second field: </label>
<input-switch [setting]="'change'" [labelVal]="'second field value'"
[formCtrl]="'secondField'">
</input-switch>
<button type="submit" [disabled]="!masterForm.valid"></button>
</form>
主窗体组件类-
class MasterFormComponent implements OnInit {
masterForm: FormGroup;
constructor(private fb: FormBuilder){}
ngOnInit() {
this.masterForm = this.fb.group({
firstField: ['', Validators.maxLength(10)],
secondField: ['', Validators.maxLength(20)]
});
}
submitData(form) {
console.log('DONE!');
}
}
输入开关子组件类-
class InputSwitch {
@Input() setting ;
@Input() labelVal;
@Input() formCtrl;
}
输入切换子组件html -
<span *ngIf="setting !== 'change'">{{labelVal}}</span>
<input *ngIf="setting === 'change'" [formControlName]="formCtrl" />
在 input-switch.component 中提到缺少“formGroup”时出现错误,我无法设置表单。 这里似乎有什么问题? 有没有其他方法可以实现这个功能?
【问题讨论】:
标签: javascript angular typescript angular-reactive-forms reactive-forms