动态增减表单项,如何定位,根据一个select控制另外一个select?

已解决 ,使用下面的 watch 监听就可以。

vue + iview
表单通过 添加 删除 按钮动态增减表单条数,增减部分是 model.projects。循环如下结构数据展示。
功能要求:当 类型 选择 功能 时,禁用 规格 下拉选项,即增加disabled="true"属性。

如何实现?

1.页面结构片断:

      <z-form
        ref="modelDialog"
        :model="model"
        :label-width="100"
        label-position="left"
      >
        <z-row>
          <z-col span="8">
            <z-form-item label="模块名称">
              <z-input
                v-model="model.partName"
                :maxlength="40"
                placeholder="请输入..."
                clearable
              />
            </z-form-item>
          </z-col>
        </z-row>
        <div v-for="(item, index) in model.projects" :key="index">
          <z-edit-panel class="m-t-15 p-t-20">
            <z-row>
              <z-col span="8">
                <z-form-item label="类型">
                  <z-select
                    v-model="item.type"
                    placeholder="请选择..."
                    @on-change="handleChange"
                  >
                    <z-option
                      v-for="item in typeName"
                      :value="item.value"
                      :key="item.value"
                      >{{ item.label }}</z-option
                    >
                  </z-select>
                </z-form-item>
              </z-col>
            </z-row>
            <z-row>
              <z-col span="8">
                <z-form-item label="名称">
                  <z-input
                    v-model="item.name"
                    :maxlength="40"
                    placeholder="请输入..."
                    clearable
                  />
                </z-form-item>
              </z-col>
            </z-row>
            <z-row>
              <z-col span="9">
                <z-form-item label="等级">
                  <z-select v-model="item.level" placeholder="请选择...">
                    <z-option
                      v-for="item in projectLevelOption"
                      :value="item.value"
                      :key="item.value"
                      >{{ item.label }}</z-option
                    >
                  </z-select>
                </z-form-item>
              </z-col>
              <z-col span="8">
                <z-form-item label="规格">
                  <z-select
                    v-model="item.standard"
                    placeholder="请选择..."
                  >
                    <z-option
                      v-for="item in checkFunction"
                      :value="item.value"
                      :key="item.value"
                      >{{ item.label }}</z-option
                    >
                  </z-select>
                </z-form-item>
              </z-col>
            </z-row>
            <z-row>
              <z-col span="10">
                <z-form-item label="标准">
                  <z-input
                    v-model="item.projectStandard"
                    type="textarea"
                    :autosize="{ minRows: 3, maxRows: 5 }"
                    placeholder="Please enter the detailed address"
                    class="standard-textarea"
                  ></z-input>
                </z-form-item>
              </z-col>
              <z-col span="4">
                <z-form-item
                  class="standardTextarea"
                  v-if="index === model.projects.length - 1"
                >
                  <z-button
                    type="primary"
                    size="small"
                    icon="plus-round"
                    @click="addItem"
                    >添加</z-button
                  >
                </z-form-item>
                <z-form-item
                  class="standardTextarea"
                  v-if="index === model.projects.length - 1"
                >
                  <z-button
                    type="error"
                    size="small"
                    icon="minus-round"
                    @click="delItem"
                    >删除</z-button
                  >
                </z-form-item>
              </z-col>
            </z-row>
          </z-edit-panel>
        </div>
      </z-form>

2.数据片断:

      model: {
        typeId: '',
        partId: '',
        partName: '模块名称',
        projects: [
          {
            name: '名称',
            type: '类型',
            standard: '规格',
            level: '等级',
          }
        ]
      },
  1. 新增方法:
    addItem() {
      this.model.projects.push({
            name: '',
            type: '',
            standard: '',
            level: '',
      })
    },
    delItem() {
      this.model.projects.pop()
    }

=================================

watch监听里,用最简单的for循环,监听某一组表单有了变化,但如何将变化返回到指定的表单项呢?

    model: {
      handler(newName, oldName) {
        for (let i = 0; i < this.model.projects.length; i++) {
          if (this.model.projects[i].type === '1') {
             // 可以设置一个变量,控制当前表单项里指定select的disable
          }
        }
      },
      deep: true
    }
阅读 2k
1 个回答
 <z-select
:disabled="item.type== '功能编码'"
                    v-model="item.standard"
                    placeholder="请选择..."
                  >
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题