繁体   English   中英

Angular2 Reactive Forms禁用表单组中的元素

[英]Angular2 Reactive Forms disable elements in form group

我的组件中有一个反应式表单设置,允许用户编辑表单中的用户数据。

在此表单上,有表行,每行的末尾是一个复选框,用于禁用或启用该行中的所有输入。 用户实质上允许填写该组输入数据。

这是我的表单组:

slice3: this.fb.group({
    shitStatus: { value: 0 },
    hour_start: { value: '1', disabled: true },
    minute_start: { value: '00', disabled: true },
    period_start: { value: 'AM', disabled: true },
    hour_end: { value: '1', disabled: true },
    minute_end: { value: '00', disabled: true },
    period_end: { value: 'AM', disabled: true },
    days: this.fb.group({
        day_Su: { value: '', disabled: true },
        day_M: { value: '', disabled: true },
        day_Tu: { value: '', disabled: true },
        day_W: { value: '', disabled: true },
        day_Th: { value: '', disabled: true },
        day_F: { value: '', disabled: true },
        day_Sa: { value: '', disabled: true }
    })
})

我有一个函数,当它们选中或取消选中该框时,切换此表单组中的所有元素:

toggleSlice(slice) {

  if (this.transitionForm.get('shift.slice' + slice).disabled) {
    this.transitionForm.get('shift.slice' + slice).enable();
  } else {
    this.transitionForm.get('shift.slice' + slice).disable();
  }

}

我的问题是由于shiftStatus是表单组的一部分,它也会禁用切换按钮,这会阻止我重新打开这组元素。

有没有办法在这里使用某种类型的运算符,这允许我说除了特定的输入之外,禁用shift.slice所有内容?

例如,在jQuery中,我可以执行以下操作:not("blah")将此逻辑应用于除此输入之外的所有内容。

可以用javascript完成任何事情,这将允许我禁用表单组中的所有这些元素,除了我指定的那个元素?

我看到的最简单的解决方案是禁用所有表单控件,然后只启用一个表单控件,我无法想到更好的方法。 这里只是伪代码:

if (this.myForm.get('group').disabled) {
  this.myForm.get('group').enable();
} else {
  this.myForm.get('group').disable();
  this.myForm.get('group.shiftStatus').enable()
}

您可能还想要的是将这个表单控件路径实际存储到变量中,这样您就不需要一直调用get ,但这只是一个建议:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM