Element-UI中回显失败问题的完美解决

当我们在使用 Element-UI 中的级联选择器(Cascader)组件时,有时会遇到回显失败的问题,导致选择的值无法正确显示在界面上。这个问题的解决方式有多种,下面我们来详细介绍一种完美解决方案。

问题现象

在使用 Element-UI 的级联选择器组件时,有时候我们需要在修改页面中回显已经选择过的值。这时候,我们可以使用v-model绑定父子组件的选中值,但是当选中的值比较复杂时,我们可能会遇到回显失败的问题。

比如我们有如下的一个选项列表:

options: [
  {
    value: 'beijing',
    label: '北京',
    children: [
      {
        value: 'chaoyang',
        label: '朝阳区',
        children: [
          {
            value: 'taiyanggong',
            label: '太阳宫'
          }
        ]
      },
      {
        value: 'haidian',
        label: '海淀区',
        children: [
          {
            value: 'wudaokou',
            label: '五道口'
          },
          {
            value: 'zhongguancun',
            label: '中关村'
          }
        ]
      }
    ]
  }
]

我们通过父子组件间的绑定,在父组件中将选中的值存储在value中,然后再通过v-model与子组件进行双向绑定。

<template>
  <el-cascader
    v-model="value"
    :options="options"
    :props="props"/>
</template>

这样,当我们选择了 北京-海淀区-中关村 时,value的值为['beijing', 'haidian', 'zhongguancun'],同时级联选择组件也正确地显示了选择的值。

但是当我们将已经选择好的值传入组件中时,发现级联选择器的选项不会跟随传入的value更新。这个问题具体表现为,如果我们传入的value值为['beijing', 'haidian'],虽然在组件的value中正确地得到了存储,但是在界面上,北京已经被选中,但是海淀区未被选中。

完美解决方案

为了解决这个问题,我们需要引入 Element-UI 中的opts参数。opts是一个包含多个属性的对象,其中emitPathlazy属性是我们需要关注的重点。

在我们正常使用级联选择器时,emitPathlazy属性默认是忽略的。这就导致当我们传入一段选中值数组[value1, value2, ..., valueN]时,组件无法判断这些选中值与级联选择器的选项之间的正确映射关系,导致回显失败。

为了解决这个问题,我们需要手动设置opts参数:

<template>
  <el-cascader
    v-model="value"
    :options="options"
    :props="props"
    :opts="opts"/>
</template>

同时我们还需要为这个 opts 对象提供正确的值:

opts: {
  emitPath: false,
  lazy: true
},
  • emitPath是控制级联选择器与外部应用之间数据交互的一个属性。当该值被赋值为true时,父组件向子组件传值时会传递一个经过处理的路径数组,而不是单纯的选中值数组。这种传值的方式可以让级联选择器更好地与我们的应用进行交互。
  • lazy是控制级联选择器懒加载选项的一个属性。开启该属性后,级联选择器在加载选项时,只会加载当前展示选项及其子选项,而不是一次性加载全部选项,减轻了前端的数据压力。

最终,我们只需要在传入选中值时提供正确的映射路径即可。比如我们要回显['beijing', 'haidian', 'zhongguancun'],我们需要这样传值:

<template>
  <el-cascader
    v-model="value"
    :options="options"
    :props="props"
    :opts="opts"
    :value="['beijing', 'haidian', 'zhongguancun']"
    />
</template>

这样设置后,就可以正确地将已经选好的值在界面上显示出来了。同时,我们还可以通过传入动态的路径数组,来动态地更新级联选择器的选中值。比如当我们重新选中了['beijing', 'haidian']时,界面上就会正确地显示出北京-海淀区这个选项。

示例说明

下面分别是传入数组格式错误和传入数组格式正确的例子,来进一步说明这个问题。

示例 1:传入数组格式错误

在这个示例中,我们通过修改父组件中的value属性,将选中值变成了一个普通数组,而不是一个经过处理的路径数组。这样就导致了选中值无法正确回显。

<template>
  <el-cascader
    v-model="value"
    :options="options"
    :props="props"
    :opts="opts"
    />
  <button @click="changeValue()">改变选中值</button>
</template>
export default {
  data() {
    return {
      value: ['beijing', 'haidian', 'zhongguancun'],
      options: [
        {...}
      ],
      props: {
        value: 'value',
        label: 'label',
        children: 'children'
      },
      opts: {
        emitPath: false,
        lazy: true
      }
    };
  },
  methods: {
    changeValue() {
      this.value = ['beijing', 'haidian', 'wudaokou'];
    }
  }
}

此时,在点击“改变选中值”按钮后,界面上只有北京会被选中,海淀区五道口没有被选中。

示例 2:传入数组格式正确

在这个示例中,我们正确地使用了经过处理的路径数组。这样,即使曾经选中的值非常复杂,也能正确地回显在界面上。

<template>
  <el-cascader
    v-model="value"
    :options="options"
    :props="props"
    :opts="opts"
    :value="['beijing', 'haidian', 'zhongguancun']"
    />
  <button @click="changeValue()">改变选中值</button>
</template>
export default {
  data() {
    return {
      value: [],
      options: [
        {...}
      ],
      props: {
        value: 'value',
        label: 'label',
        children: 'children'
      },
      opts: {
        emitPath: false,
        lazy: true
      }
    };
  },
  methods: {
    changeValue() {
      this.value = ['beijing', 'haidian', 'wudaokou'];
    }
  }
}

此时,在点击“改变选中值”按钮后,界面上会正确选中北京-海淀区-五道口这个选项。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Element-UI中回显失败问题的完美解决 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • Vue数据驱动模拟实现3

    Vue数据驱动模拟实现是指通过手动实现Vue框架底层的部分功能,来深入理解Vue的数据响应式原理。下面我们将给出实现Vue数据驱动的完整攻略: 1. 实现数据响应式 Vue的数据响应式是基于Object.defineProperties实现的,我们可以手动实现一个简化版的数据响应式: function defineReactive(obj, key, val…

    Vue 2023年5月28日
    00
  • ant-design-vue 时间选择器赋值默认时间的操作

    背景介绍 ant-design-vue 是一个基于 Ant Design 设计体系的 Vue UI 组件库,并且内置了丰富的组件和样式,提供了良好的使用体验和开发效率。其中时间选择器是常用的组件之一,需要注意的是,在使用时间选择器时,有时候需要设置默认日期,本文将详细介绍如何在 ant-design-vue 中设置时间选择器的默认日期。 操作步骤 步骤一:在…

    Vue 2023年5月29日
    00
  • uni-app使用微信小程序云函数的步骤示例

    下面是uni-app使用微信小程序云函数的步骤示例的完整攻略: 1. 简介 uni-app是一款使用vue语法开发的跨平台开发框架,它能够一次编写多端代码(H5、小程序、App等),具有开发效率高、性能好、维护方便等优点。微信小程序云开发则是在微信小程序中提供了一个方便快捷的开发平台,其中之一就是云函数,它可以将服务器上的计算资源和代码在云端进行执行并返回结…

    Vue 2023年5月28日
    00
  • vue中的双向数据绑定原理与常见操作技巧详解

    Vue中的双向数据绑定原理与常见操作技巧详解 1. 双向数据绑定原理 Vue中的双向数据绑定是通过 v-model 指令实现的。双向数据绑定本质上是一个语法糖,它实际上是将输入事件和属性绑定事件结合在一起,使得不仅仅当属性值改变时,视图也可以立刻改变,同时也可以通过视图改变属性值,从而实现双向数据绑定。 当我们使用 v-model 指令时,例如: <i…

    Vue 2023年5月27日
    00
  • Vue表格组件Vxe-table使用技巧总结

    Vue表格组件Vxe-table使用技巧总结 简介 Vxe-table是一款基于Vue.js的表格组件,提供了强大的分页、排序、编辑、导入导出等功能,可以快速应用于数据管理系统等场景。 本文将总结Vxe-table的常见使用技巧,包括数据渲染、插槽、操作按钮、事件监听等,帮助快速上手Vxe-table的使用。 安装 可以通过以下命令来安装Vxe-table:…

    Vue 2023年5月29日
    00
  • Vuex总体案例详解

    Vuex总体案例详解 Vuex是Vue.js的状态管理模式,它集中管理组件的状态变化,并提供了一些方法让组件能够修改和访问状态。在这里,我们将讨论一个Vuex的完整案例,具体的实现细节和代码示例。 步骤1:安装Vuex 如果你想在一个Vue.js应用中使用Vuex,你需要先安装它。可以通过npm进行安装,在命令行中输入以下代码: npm install vu…

    Vue 2023年5月27日
    00
  • vue项目用后端返回的文件流实现docx和pdf文件预览

    为了实现Vue项目中使用后端返回的文件流来实现docx和pdf文件预览,我们需要考虑以下几个步骤: 后端接口的开发,即后端如何将docx和pdf格式的文件以流的方式返回给前端; 前端的代码实现,即如何将后端返回的文件流渲染成文档预览界面; 在Vue项目中具体使用这种文件预览功能。 下面我会针对每个步骤详细讲解。 后端接口的开发 在后端开发的时候,我们需要做的…

    Vue 2023年5月28日
    00
  • vue计算属性和监听器实例解析

    Vue计算属性和监听器实例解析 在Vue中,计算属性和监听器是常用的属性,它们起到了非常关键的作用。通过它们,我们可以对数据进行处理和监听,从而提高应用的开发效率和性能。在本文中,我将分享关于Vue计算属性和监听器的解析,包括定义、使用方法和示例说明。 什么是计算属性 计算属性是Vue中常用的一个属性,用于对数据进行更加复杂的处理。其本质上是一个函数,可以根…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部