首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角10严格模式: AbstractControl对FormControl

角10严格模式: AbstractControl对FormControl
EN

Stack Overflow用户
提问于 2020-06-30 17:19:49
回答 3查看 3.5K关注 0票数 6

我有一个自定义组件:

代码语言:javascript
复制
<my-component [control]="..."></my-component>

在这里,控制被定义为:

代码语言:javascript
复制
@Input() control: FormControl;

的用法:

代码语言:javascript
复制
this.myFormGroup = new FormGroup({
    name: new FormControl('')
});

<my-component [control]="myFormGroup.controls.name"></my-component>

错误:

角10严格模式抱怨"myFormGroup.controls.name“不是FormControl。

“控件”在FormGroup中定义为一个对象,其中每个字段都是AbstractControl类型的:

代码语言:javascript
复制
// forms.d.ts
export declare class FormGroup extends AbstractControl {
    controls: {
        [key: string]: AbstractControl;
    };
    // ....
}

这段代码可以在运行时工作,但不编译。

解决这个问题最好的办法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-06-30 17:24:49

过去,我通过在表单组之外保留对表单控件的引用来避免这种情况。

例:

代码语言:javascript
复制
this.nameControl = new FormControl()
this.myFormGroup = new FormGroup({
    name: this.nameControl,
});
票数 2
EN

Stack Overflow用户

发布于 2020-06-30 19:07:50

另一种方法是在输入中使用setter。在组件中(*)

代码语言:javascript
复制
  control:FormControl //declare a variable
  @Input('control') set _control(value:AbstractControl) //<--here expect an AbstracControl
  {
    this.control=value as FormControl
  }

stackblitz中的一个愚蠢的例子

(*)我选择了@Input('control') set anyfunctionName不更改组件的方式

票数 2
EN

Stack Overflow用户

发布于 2020-06-30 17:36:38

可以使用AbstractControl方法得到()与TypeScript类get函数组合访问控件:

代码语言:javascript
复制
get name() {
  return this.myFormGroup.get('name') as FormControl
}

然后,可以在模板中轻松地访问该控件:

代码语言:javascript
复制
<div>{name.value} {name.valid}</div>

这在关于反应形式的文档中进行了描述。

希望这能帮上忙!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62662863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档