已禁用在angular 2中不将formControlName用于模型驱动表单?

已禁用在angular 2中不将formControlName用于模型驱动表单?,angular,Angular,我使用的是模型驱动的模板。如果复选框未选中,我想禁用输入。但它不适用于formControlName。 我试过三种方法。给我 1.disabled="!filterForm.value.customer_limit" 2.[disabled]="!filterForm.value.customer_limit" 3.[readonly]="!filterForm.value.customer_limit" 这是我的HTML代码: <md-checkbox [checked]="f

我使用的是模型驱动的模板。如果复选框未选中,我想禁用输入。但它不适用于formControlName。 我试过三种方法。给我

 1.disabled="!filterForm.value.customer_limit"
 2.[disabled]="!filterForm.value.customer_limit"
 3.[readonly]="!filterForm.value.customer_limit"
这是我的HTML代码:

 <md-checkbox [checked]="filterForm.value.customer_limit" formControlName="customer_limit">
                        <md-input-container class="full-width">
                            <input mdInput
                                   formControlName="customer_limit_input"
                                   [disabled]="!filterForm.value.customer_limit"
                                   placeholder="Limit to customers">
    </md-input-container>
    </md-checkbox>


你有什么想法请帮帮我。感谢您在组件中定义
布尔变量来保存输入状态:

  disabled: boolean = true;
在模板中,您可以按以下方式切换它:

<md-checkbox [(ngModel)]="disabled">Toggle Input</md-checkbox>
<input mdInput [disabled]="disabled">
 <md-checkbox [formControl]="checkbox">Toggle Input</md-checkbox>
 <input mdInput [disabled]="disabled">
我从使用formControlName禁用的集合中获得了解决方案

form = new FormGroup({
    'first': new FormControl({value: 'hello', disabled: false})
  })

ngOnInit(): void {
        this.filterForm.valueChanges.subscribe(
            (formValue) => {
               console.log(formValue)
            }
        );
    }

对于反应式表单,
[disabled]
disabled
不起作用。您可以使用的是检查复选框是否选中,以及禁用或启用输入字段

首先,我删除了复选框中的输入字段,不知道为什么会放在那里

然后在构建表单时,我做了一个if语句来检查
customer\u input
的值,如果输入字段为false,则禁用该字段:

如果此.myForm.get('customer\u limit')。值===true
this.myForm.get('customer\u limit\u input').enable()
如果虽然您最初知道客户限额的布尔值
,但您可以跳过上述内容,只需先禁用该字段(如果是这种情况),如Shailesh所建议:

customer\u limit\u输入:[{value:'something',disabled:true}]
我放置了一个更改事件来观察复选框的状态,并在发生更改时调用函数:


disableInput()
函数:

禁用输入(bool:boolean){
如果布尔===真
this.myForm.get('customer\u limit\u input').enable()
其他的
this.myForm.get('customer\u limit\u input').disable()
}
我不知道是否有一个更优雅的解决方案,但这是我迄今为止使用的


这是您的
formControlName=“customer\u limit”
,您正在以
[disabled]=“!FiltPerform.value.customer\u limit”的身份访问。您正在使用另一个
.value
,该值将在@Aravind@its not undefined时未定义。我查了一下,然后发生了什么事。创建一个plunker来重现问题。我使用模型驱动的方法。问题已禁用,无法使用formControlName@ShaileshLadumor你犯了什么错误?您的复选框是在表单中还是像模板显示的那样是单独的?非常欢迎!我认为对于这个
禁用
-问题,没有比手动禁用和启用更好的解决方案了,因为没有手动禁用和启用可能有点奇怪。但是,除
change
之外,还有其他选项可以查看更改,您可以使用另一个答案中提供的
valueChanges
。我只是更喜欢使用
change
,但这是我的偏好问题!:)祝你有愉快的一天和愉快的编码!:)实际上,在我的表单中有很多复选框,所以valueChanges方法给出了完整的表单数据,所以我需要选中所有复选框,然后启用输入。和change方法给出一个特定的复选框change事件,以便直接设置enable disable。这就是为什么在我的情况下,你的答案更好。谢谢。
form = new FormGroup({
    'first': new FormControl({value: 'hello', disabled: false})
  })

ngOnInit(): void {
        this.filterForm.valueChanges.subscribe(
            (formValue) => {
               console.log(formValue)
            }
        );
    }