下拉框二级联动 选中后视图没有渲染等问题解决办法

问题:

当前端要展示二级联动效果,或者多级联动。

问题1:我们点击一级下拉框的数据时,二级数据不能展示到二级下拉框

问题2:或者点击一级下拉框的数据时,二级数据能展示到二级下拉框,但点击二级下拉框的数据时,不能展示到页面

解决思路:

实质就是数据层级太深,我们一次性从后端拿到二级的全部数据,当数据改变后,视图没有重新渲染,所以要强制刷新视图,重新渲染,这个比较消耗性能。

解决方法:

给二级下拉框绑定一个 @change="linkChange()"事件,调用 this.$forceUpdate()来强制刷新

       <!-- 二级分类 -->
        <el-select
          v-model="sightsInfo.classifyId"
          placeholder="请选择"
          @change="linkChange()"
        >
          <el-option
            v-for="classifyTwo in classifyTwoList"
            :key="classifyTwo.id"
            :label="classifyTwo.title"
            :value="classifyTwo.id"
            no-data-text
          />
        </el-select>

绑定方法:

    methods: {
        linkChange() {
          this.$forceUpdate()
    }
},

下拉框完整代码

<!-- 所属分类 TODO -->
      <el-form-item label="景点城市">
        <!-- 一级分类 -->
        <el-select
          v-model="sightsInfo.classifyParentId"
          placeholder="请选择"
          @change="classifyLevelOneChanged"
        >
          <el-option
            v-for="classifyOne in classifyOneList"
            :key="classifyOne.id"
            :label="classifyOne.title"
            :value="classifyOne.id"
          />
        </el-select>
        <!-- 二级分类 -->
        <el-select
          v-model="sightsInfo.classifyId"
          placeholder="请选择"
          @change="linkChange()"
        >
          <el-option
            v-for="classifyTwo in classifyTwoList"
            :key="classifyTwo.id"
            :label="classifyTwo.title"
            :value="classifyTwo.id"
            no-data-text
          />
        </el-select>
      </el-form-item>

此方法同样适用于多级联动 ~~~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Vue.js实现下拉框二级联动通常涉及到两个组件级别的联动操作,即一个下拉框(一级)的选择会影响另一个下拉框(二级)的数据源。具体步骤如下: 1. **创建数据结构**:首先,你需要定义好数据模型,比如有两个数组,一级下拉框对应选项A,二级下拉框对应选项B,每个A项关联一到多个B项。 ```json { "itemsA": [ { "id": 1, "name": "选项A1", "itemsB": [ {"id": 11, "name": "选项B1"}, {"id": 12, "name": "选项B2"} ] }, { "id": 2, "name": "选项A2", "itemsB": [ {"id": 21, "name": "选项B3"}, {"id": 22, "name": "选项B4"} ] } ], "itemsB": [] } ``` 2. **绑定选择事件**:在Vue实例,将一级下拉框的`v-model`绑定到一个属性上,如`selectedItemA`,监听这个值的变化。 3. **处理联动逻辑**:当一级下拉框选中的时候,根据`selectedItemA`从服务器或本地获取对应的二级下拉框选项`itemsB`,然后更新视图。 ```javascript <template> <select v-model="selectedItemA"> <!-- 一级下拉框 --> <option v-for="(itemA, index) in itemsA" :key="index" :value="itemA.id">{{ itemA.name }}</option> </select> <select v-model="selectedItemB"> <!-- 二级下拉框 --> <option v-for="(itemB, index) in filteredItemsB" :key="index" :value="itemB.id">{{ itemB.name }}</option> </select> </template> <script> export default { data() { return { itemsA: [], selectedItemA: null, itemsB: [] }; }, computed: { filteredItemsB() { if (this.selectedItemA) { return this.itemsA.find(item => item.id === this.selectedItemA)?.itemsB || []; } else { return this.itemsB; } } }, // ...其他方法和生命周期钩子 }; </script> ``` 4. **添加状态管理**:如果项目规模较大,可能需要配合Vuex来统一管理和传递数据
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值