首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对模型驱动表单使用禁用

对模型驱动表单使用禁用
EN

Stack Overflow用户
提问于 2016-09-25 06:51:24
回答 1查看 29.6K关注 0票数 25

我正尝试在模型驱动的表单中使用disabled。我有以下表格:

代码语言:javascript
复制
this.form = this.formBuilder.group({
    val1: ['', Validators.required],
    val2: [{value:'', disabled:this.form.controls.val1.valid}]
});

我收到一个错误(找不到this.formcontrols ),可能是因为我在this.form中使用了this.form

我怎么才能修复它呢?

PS我也尝试在我的html中添加[disabled]='...',但是我得到一个警告,说我应该使用formBuilder

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-25 11:17:55

是的,你是对的,问题是因为你引用了一个变量(this.form),而它还没有被初始化。幸运的是,在您的示例中,实际上不需要引用val2表单控件中的表单组。您的代码可以按如下方式重写:

代码语言:javascript
复制
let val1Control = this.formBuilder.control('', Validators.required);
this.form = this.formBuilder.group({
    val1: val1Control ,
    val2: [{value:'', disabled: val1Control.valid}]
});

但是,此块仅启动 val2 control 的disabled值,而不监控 val1Control 的有效性。为此,您需要订阅 val1Control.statusChanges

代码语言:javascript
复制
let val1Control = this.formBuilder.control('', Validators.required);
let val2Control = this.formBuilder.control({value:'', disabled: !val1Control.valid});
this.form = this.formBuilder.group({
  val1: val1Control,
  val2: val2Control
})

val1Control.statusChanges.subscribe((newStatus) => {
  if (val1Control.valid) {
    val2Control.enable();
  } else {
    val2Control.disable();
  }
});

这里是有效的柱塞:http://plnkr.co/edit/kEoX2hN9UcY4yNS3B5NF

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

https://stackoverflow.com/questions/39681674

复制
相关文章

相似问题

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