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日

相关文章

  • vue2 d3实现企查查股权穿透图股权结构图效果详解

    标题:Vue2 + D3 实现企查查股权穿透图股权结构图效果详解 在本文中,我们将介绍如何通过 Vue2 和 D3 库实现企查查股权穿透图股权结构图效果。下面将分为以下几个步骤进行讲解: 搭建项目环境 导入 D3 库 通过 D3 解析数据 绘制股权穿透图 美化股权穿透图 搭建项目环境 使用 VueCli 创建一个新项目 安装 ElementUI:npm in…

    Vue 2023年5月28日
    00
  • Vue路由vue-router用法讲解

    首先需要明确的是Vue Router是Vue.js官方的路由管理器,用于实现单页应用(SPA)的路由功能。下面我将详细讲解Vue Router的用法。 一、Vue Router的基本使用 1. 安装 使用Vue Router需要先安装它。可以通过以下命令行安装最新版本的Vue Router: npm install vue-router 安装完成后,在需要使…

    Vue 2023年5月27日
    00
  • Vue项目中ESlint规范示例代码

    Vue项目中使用ESlint进行代码规范校验是一种常见的做法,可以让我们在开发的时候,在代码质量上保证一定的一致性和规范性。下面是详细的攻略: 准备工作 在使用ESlint之前,我们需要安装一些相关的工具来支持我们的开发。 首先,我们需要在项目中安装eslint和eslint-plugin-vue插件。我们可以使用npm或者yarn来完成安装: npm in…

    Vue 2023年5月27日
    00
  • 详解Vue组件实现tips的总结

    我来为您详细讲解“详解Vue组件实现tips的总结”的完整攻略。 一、什么是tips tips是一种浮动提示框,通常用于提示用户需要注意的内容。在Vue组件中实现tips功能,可以提升用户体验,让用户更加方便地获取信息。 二、实现方式 Vue组件实现tips的方式主要有以下几种: 1. 使用原生JS实现 使用原生JS编写tips功能的代码量较大,而且需要考虑…

    Vue 2023年5月27日
    00
  • Vue安装浏览器开发工具的步骤详解

    下面是“Vue安装浏览器开发工具的步骤详解”攻略: 1. 前置条件 在安装Vue的浏览器开发工具之前,需要确保以下两个条件已经满足:1. 拥有安装Vue的基础,可以使用npm命令行在终端中安装Vue.js。2. 时间充足,可以耐心地按照以下详细步骤进行操作。 2. 安装Vue的浏览器开发工具 2.1. 安装Vue.js开发工具:Vue Devtools Vu…

    Vue 2023年5月27日
    00
  • vue使用file-saver本地文件导出功能

    下面我将为您详细讲解如何使用 Vue 和 file-saver 库实现本地文件导出功能。 1. 安装 file-saver 首先需要安装 file-saver,可以使用 npm 安装,命令如下: npm install file-saver –save 2. 使用 file-saver 在需要使用的 Vue 组件中引入 file-saver: import…

    Vue 2023年5月27日
    00
  • 解决vue select当前value没有更新到vue对象属性的问题

    我将为您详细讲解“解决Vue Select当前Value没有更新到Vue对象属性的问题”的完整攻略。 简介 在Vue开发中,我们通常会使用Vue Select组件来实现下拉选择框。但是在使用过程中,会发现Vue Select的value属性不能够及时更新到Vue对象中的属性,导致无法实现数据的双向绑定。本文将为大家提供解决这个问题的完整攻略。 解决方案 解决…

    Vue 2023年5月28日
    00
  • axios的简单封装以及使用实例代码

    下面是对于“axios的简单封装以及使用实例代码”的完整攻略: 1. axios基础概念 axios是一个基于Promise的HTTP客户端,用于浏览器和Node.js。 它支持同步请求和异步请求,并提供了优秀的HTTP拦截器。 axios提供了丰富的配置项,例如设置请求头、设置请求方式、设置超时时间等。 2. 封装axios 对axios进行简单的封装可以…

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