el-select下拉框没有数据

2023-05-16

目录

一、问题

二、问题详细描述

 三、解决方法

四、总结


一、问题

1.突然发现给options赋值了,但是下拉框没有数据,就很奇怪。

二、问题详细描述

1.直接用假数据(手动添加的数据)赋值给options,下拉框中的数据正常显示。

  1)代码如下:

<template>
    <template v-for="(contentItem, contentKey) of content">
      <el-select
        v-model="contentItem.value"
        :key="contentKey"
        placeholder="请选择人员"
      >
        <el-option
          v-for="(item, itemKey) of contentItem.options"
          :key="itemKey"
          :value="item[contentItem.matchKey]"
          :lable="item[contentItem.matchKey]"
        >
          <span>{{ item[contentItem.matchKey] }}</span>
          <span>{{ item[contentItem.lable] }}</span>
        </el-option>
      </el-select>
    </template>
</template>
<script>
export default {
  data() {
    return {
      //下拉框数据
      content: {
        person: {
          value: "",
          matchKey: "name",
          type: "select",
        },
      },
    },
   },
   mounted(){
      this.initData();
      this.content.person.value = "奇怪的事情";
   },
   methods:{
   initData(){
       this.getPerson();
    },
    //获取用户
    getPerson() {
      console.log("person---get");
      this.content.person.options = {
        0: {
          name: "小明",
          id: "01",
        },
        1: {
          name: "小华",
          id: "02",
        },
        2: {
          name: "小青",
          id: "1000000000000001",
        },
      };
   }
}
</script>

  2)效果如图1所示

图 1

2.调用接口添加数据

   1)代码如下:

  

<template>
    <template v-for="(contentItem, contentKey) of content">
      <el-select
        v-model="contentItem.value"
        :key="contentKey"
        placeholder="请选择人员"
      >
        <el-option
          v-for="(item, itemKey) of contentItem.options"
          :key="itemKey"
          :value="item[contentItem.matchKey]"
          :lable="item[contentItem.matchKey]"
        >
          <span>{{ item[contentItem.matchKey] }}</span>
          <span>{{ item[contentItem.lable] }}</span>
        </el-option>
      </el-select>
    </template>
</template>
<script>
import { _findPacuDoctorList } from "@/api/implemenceAPI";
export default {
  data() {
    return {
      //下拉框数据
      content: {
        person: {
          value: "",
          matchKey: "name",
          type: "select",
        },
      },
    },
  }
   mounted(){
      this.initData();
      this.content.person.value = "奇怪的事情";
   },
   methods:{
   initData(){
       this.getPerson();
    },
    //获取用户
    getPerson() {
      console.log("person---get");
      let params = {
        data: {
          type: 4,
          name: typeof inputContent === "string" ? inputContent : "",
        },
        size: "100",
        sortBy: "name",
      };
      _findPacuDoctorList(params)
        .then((result) => {
          if (result.status === 200) {
            console.log("result", result);
            this.content.person.options = result.data.content;
          }
        })
        .catch((error) => {
          console.log("error", error);
        });
   }
}
</script>

   2)效果如图2所示:

    调用了接口,并且有数据返回,但是   下拉框中没有数据

图 2

3.百思不得其解呀,明明就是类似的东西,只是一个是直接赋值,一个是调接口赋值而已,怎么会这样呢?

1)更奇葩的是我想复现上述1、2所示的情况时,发现1无法复现---即直接赋值也会 导致图2的效果,下拉框无数据。

a.仔细对比后,发现上述1所示现象的前提条件是 给下拉框数据options赋值前,对该下拉框出现的值 提前赋初始值(如代码1中mounted函数中的:      this.content.person.value = "奇怪的事情";
)

b.若删除代码1中的       this.content.person.value = "奇怪的事情";则会发现下拉框  如图2 所示,下拉框中没有数据

4.更神奇的事情,若 代码1和代码2合并,即先用假数据给options赋值,再用接口获取数据给options赋值。则会导致第一次点击下拉框数据是:假数据,并选中一个选项,如图3所示;之后点击下拉框数据是:调用接口获取的数据,如图4所示。

图 3 第一次点击下拉框并选中一个数据

图 4 之后点击下拉框

 三、解决方法

1.仔细检查才发现,上面的奇葩现象是因为我声明  data时  没有添加 options属性。options属性不是响应式的。

    如  二、问题详细描述 , 4中描述的情况:在mount时已经给 person赋值,data初始化完毕,第一次选择的时候,先用假数据给options赋值,下拉框有了数据,接着异步调用接口给options重新赋值,但因为options是非响应式的,没有更新。选择一个选项,触发点击事件的同时,还触发了 updatePopper事件,更新了下拉框的值.所以之后点击下拉框数据都是 调用接口返回的数据

图 5 执行点击事件后,最后执行了  updatePopper

  data() {
    return {
      //下拉框数据
      content: {
        person: {
          value: "",
          matchKey: "name",
          type: "select",
        },
      },
    },
   },

2.在data中添加 options属性即可: options:[]

  data() {
    return {
      //下拉框数据
      content: {
        person: {
          value: "",
          matchKey: "name",
          type: "select",
          options:[],
        },
      },
    },
   },

 上述所述的奇葩问题都没有了。

  1)直接用假数据赋值,下拉框有值

  2)直接用接口返回值赋值,下拉框有值

  3)先用假数据赋值,再用接口返回值赋值,下拉框有值(接口返回值)

四、总结

1.赋值后下拉框不显示数据,或下拉框数据需要先执行点击操作等才被更新等情况,请仔细检查 options是否在 data中声明过(是否是响应式的)。

2.以上是自己在写代码中踩得坑,之前也有一直看到响应式有关的内容,但并没有真正get到。这次算是认识了一点点。

/*

希望对你有帮助!

如有错误,欢迎指正!非常感谢!

*/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

el-select下拉框没有数据 的相关文章

随机推荐

  • Snipaste常用快捷键(详细总结)

    Snipaste快捷键 xff08 详细总结 xff09 全局快捷键 全局操作截屏F1贴图F3退出当前截图Esc截屏并自动复制Ctrl 43 F1隐藏 显示所有贴图Shift 43 F3切换到另一组贴图Ctrl 43 F3 鼠标贴图相关操作
  • 4位数值比较器电路

    4位数值比较器电路 题目描述 xff1a 使用门级描述方式 xff0c 实现4位数值比较器 某4位数值比较器的功能如下表 96 timescale 1ns 1ns module comparator 4 input 3 0 A input
  • Maven项目pom.xml project标签爆红解决方法

    今天在打开项目的时候 xff0c 发现了一个Maven项目的问题 xff0c 在Maven项目的pom xml文件中 xff0c project标签爆出了一个错误 parent relativePath of POM com hrp spr
  • 人工智能学习笔记五——孪生神经网络

    本文将用孪生神经网络模型 xff0c 对手写数字集minist进行相似度比较 xff0c 用的框架是keras 如果还不清楚神经网络 xff0c 可以看一下这篇文章 神经网络 caodong0225 github io MNIST 是一个手
  • Docker Swarm实战初探

    声明 xff1a 本文CSDN作者原创投稿文章 xff0c 未经许可禁止任何形式的转载 xff0c 原文链接 环境 宿主机 xff1a macOS 10 15 7虚拟机平台 xff1a Parallels Desktop 15 1 2虚拟机
  • 零基础DIY四轴飞行器超级详细保姆级教程(STM32F407ZGT6主控、WIFI图传、陀螺仪平衡、气压计/超声波定高、手机蓝牙控制等功能)

    前言 大四毕业后暑假没事做就花了一点DIY了一个四轴飞行器 xff0c 是比较大的那种F450机架 xff0c 不是那种PCB板做机架的小四轴 xff0c 因为我也是从零基础开始做的四轴 xff0c 现在就想把自己的过程写成博客分享在网上
  • shell教程

    shell 简介 Shell是一种脚本语言 xff0c 通常用于在Unix和类Unix操作系统上进行命令行交互 它是用户与操作系统内核之间的接口 xff0c 允许用户通过命令行或脚本文件来控制计算机上的操作 Shell程序通常用于执行复杂的
  • matlab画图常用函数image、imagesc、imshow区别

    1 image函数 从数组显示图像 xff0c 直接把矩阵中的值当作索引值 xff08 称为直接映射 xff09 xff0c 即数值1对应RGB1 xff0c 数值2对应于RGB2 xff0c 当小于1或大于64时表现为两端的颜色 语法1
  • 树莓派WiFi连接问题及网页打开问题的解决

    树莓派WiFi连接问题及网页打开问题的解决 一 问题描述 前一段时间在网上买了一个树莓派 4b计划做一个人脸识别的智能锁 xff0c 前一段时间整赶上期末考试 xff0c 挤时间做了做人脸识别以及人体红外感知模块 xff0c 大致能简单实现
  • C++11之正则表达式(regex_match、regex_search、regex_replace)

    在C 43 43 11中引入了正则表达式 字符规则 先来了解一下这个字符的含义吧 字符描述 转义字符 匹配字符行尾 匹配前面的子表达式任意多次 43 匹配前面的子表达式一次或多次 xff1f 匹配前面的子表达式零次或一次 m 匹配确定的m次
  • Java中Lambda表达式使用及详解

    Java中Lambda表达式使用及详解 前言 一 Lambda表达式的简介 Lambda表达式 xff08 闭包 xff09 xff1a java8的新特性 xff0c lambda运行将函数作为一个方法的参数 xff0c 也就是函数作为参
  • 栈的出栈次序及次序种类

    学过数据结构的程序猿应该都清楚 xff0c 栈是一种先入后出 xff0c 后入先出 xff08 LIFO xff09 的表 即插入和删除都只能在一个位置上进行 xff0c 即栈顶位置 对栈的基本操作有Push xff08 入栈 xff09
  • ANO匿名飞控时间片调度移植至普通STM32工程

    工程结构 时间片调度相关的代码位于SCHEDULER目录下的Scheduler和Task文件中 xff0c 匿名飞控原本的时钟由传感器输出的1ms脉冲实现的外部中断提供 xff0c 为使时间片调度算法可以用于一般的工程 xff0c 此处改为
  • for(let i in arr) for(let i of arr )与普通for循环的区别

    span class token keyword let span arr span class token operator 61 span span class token punctuation span span class tok
  • 执行webpack命令出错:无法识别webpack && Can‘t resolve ‘./src‘ in xxx

    一 webpack 无法将 webpack 项识别为 cmdlet 函数 脚本文件或可运行程序的名称 解决方案 xff1a 全局安装webpack 和webpack cli 命令 xff1a cnpm install webpack cli
  • 豆瓣API获取的图片不显示

    一 问题 xff1a 使用豆瓣API获取到的数据不能正常显示 二 解决方法 从控制台中查看图片的url地址发现 xff1a 同为一个网站提供的数据但是提供的url地址的域名却不同 这是不符合情理的 xff0c 因为为了使数据有规律 xff0
  • 使用 vue cli 的 vue serve命令单独运行.vue文件报错: Error: Cannot find module ‘@vue/compiler-sfc/package.json‘

    目录 一 问题 二 无需配置直接运行 vue文件 三 解决 1 详细错误 四 总结 一 问题 根据vue cli官方文档 https cli vuejs org zh guide prototyping html学习无需配置直接运行 vue
  • sass文件中使用深度选择器 /deep/不起作用

    目录 一 问题 二 原因 三 解决 使用deep深度选择器的基本步骤 四 总结 一 问题 1 想在当前的 vue文件中使用 deep 深度选择器修改第三库引入的组件或自定义组件的样式 xff0c 但是修改不成功 二 原因 1 自定义组件my
  • IconFont使用方式简介

    一 在线引入方式 1 iconfont中选择需要的图标 xff0c 加入购物车 图1 2 点击图1所示的购物车 xff0c 弹出如图2所示的弹框 依次点击 添加至项目 选择需要添加的项目 再点击确定 跳转到如图3所示的页面 图2 3 点击图
  • el-select下拉框没有数据

    目录 一 问题 二 问题详细描述 三 解决方法 四 总结 一 问题 1 突然发现给options赋值了 xff0c 但是下拉框没有数据 xff0c 就很奇怪 二 问题详细描述 1 直接用假数据 手动添加的数据 xff09 赋值给option