Javascript Angular2被动窗体禁用窗体组中的元素

Javascript Angular2被动窗体禁用窗体组中的元素,javascript,angular,typescript,Javascript,Angular,Typescript,我的组件中有一个被动表单设置,允许用户编辑表单中的用户数据 在此表单上,有表行,每行的末尾都有一个复选框,用于禁用或启用该行中的所有输入。用户基本上允许填写该组输入数据 这是我的表格组: slice3: this.fb.group({ shitStatus: { value: 0 }, hour_start: { value: '1', disabled: true }, minute_start: { value: '00', disabled: true },

我的组件中有一个被动表单设置,允许用户编辑表单中的用户数据

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

这是我的表格组:

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();
  }

}
我的问题是由于do
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
,但这只是一个建议:)

谢谢,我没有真正考虑重新启用单个元素。。有时最简单的事情就在我们面前,我们所有人都看不见。I’很高兴听到这个解决方案对你来说是可以接受的,我真的认为这是处理这个问题的最好办法。