• angular7 动态表单与验证


    表单初始数据:

    this.deviceForm = this.fb.group({
          name: ["", [Validators.required]],
          serialNumber: [""],
          modelname: [""], // 设备型号
          model: [""], // 型号
          modelId: ["", [Validators.required]], //模型ID
          make: [""], // 生成厂家
          model_memo: [""], // 备注
          iconType: ["", [Validators.required]], //类型
          mode: "",
          modename: "",
          subnet: ["", [this.validateSubnet]],
          devicePorts: this.fb.array([this.creatPort()])

    表单联动改变:modelId 改变时,为make.和model_memo 赋值。当modelId为 -1时,新建model.

     formModelChangeEmit() {
        this.deviceForm.get("modelId").valueChanges.subscribe((value) => {
          if (value == -1) {
            this.modeShowChange(true)
          } else {
            let model = this.device.models.find((item) => item.modelId == value)
            if (model) {
              this.deviceForm.patchValue({
                make: model.make,
                model_memo: model.model_memo
              })
            }
          }
        })
      }
    modeShowChange(show) {
        this.device.modeShow = show
        if (show) {
          this.deviceForm.patchValue({
            make: "",
            model_memo: ""
          })
        } else {
          this.deviceForm.patchValue({
            modelId: this.device.models[1].modelId
          })
        }
      }
     

    表单IconType改变时,修改表单的control;这里使用removeControl和addControl 主要是为了解决from的valid状态问题。

    formIcontypeChangeEmit() {
        this.deviceForm.get("iconType").valueChanges.subscribe((value) => {
          if (value == "subnet") {
            this.deviceForm.removeControl("modelId")
            this.deviceForm.removeControl("devicePorts")
            this.deviceForm.updateValueAndValidity()
            this.deviceForm
              .get("subnet")
              .setValidators([Validators.required, this.validateSubnet])
            this.subnetShow = true
          } else {
            this.deviceForm.get("subnet").setValidators(null)
            this.deviceForm.addControl(
              "modelId",
              new FormControl("", [Validators.required])
            )
            this.deviceForm.addControl(
              "devicePorts",
              this.fb.array([this.creatPort()])
            )
            this.formModelChangeEmit()
            this.subnetShow = false
          }
        })
      }
  • 相关阅读:
    Grakn Forces 2020 I. Bitwise Magic
    October Challenge 2020 Division 1
    杂题
    杂题
    杂题
    hdu 6868
    Codeforces Round #673 (Div. 1)
    杂题
    2019 ICPC World Finals K
    【CSP2019】括号树 题解(递推+链表)
  • 原文地址:https://www.cnblogs.com/isylar/p/13389446.html
Copyright © 2020-2023  润新知