解决Vue中el-select第二次选择选项时才会显示上一个选项的响应结果

这篇具有很好参考价值的文章主要介绍了解决Vue中el-select第二次选择选项时才会显示上一个选项的响应结果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

今天在写一个选择器的时候出现一个问题

这个功能需求是:通过选择器选择不同的选项,点击查询按钮发送请求,并将响应结果放到一个div中用v-if控制是否显示。

看似简单的一个功能,却出现一个很搞笑的bug。在我选择一个选项点击查询,本应该显示结果的div没有显示出来,而在选择一个其他选项,不需要点击查询按钮,这个div就自动显示出来了

解决Vue中el-select第二次选择选项时才会显示上一个选项的响应结果

附上我的代码,这里使用Vue3的组合式API

<template>
    <span>班级:</span>
    <el-select v-model="classId" class="m-2" placeholder="Select" size="large">
        <el-option v-for="item in options" :key="item.id" :label="item.className" :value="item.id" />
    </el-select>
    <span>&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <el-button type="primary" round @click="search">查询</el-button>
    <br>
    <div v-if="isDisplay">
        <el-link v-for="item in checkNames" :key="item" @click="download(item)">
            {{ item }}
        </el-link>
    </div>
</template>
<script setup>
import { ref } from 'vue';
import { getServerUrl } from '../../config/url';
import axios from 'axios';
    
let isDisplay = ref(false);
function search() {
    isDisplay.value = true;
    //发送请求,获得响应
    axios.get(getServerUrl() + "/getCheckByClass/" + classId.value)
        .then((response) => {
            const respData = response.data;
            console.log(respData.data);
            checkNames = respData.data;
        })
}

那么该如何解决呢?

第一步:首先判断你的变量有没有使用Vue的响应式状态,选项式API只需要把变量放到data()中并且return就好了

let isDisplay = ref(false);或者let isDisplay = reactive(false);

第二步:在请求结束的.then中改变isDisplay的值。因为异步操作和响应式数据更新的时机不同步,在查询函数 search() 中将 isDisplay 设置为 true,但由于涉及异步操作(axios 请求),在数据还没有返回之前,页面就已经渲染完毕了。

问题看似解决了,但是依然会发现另外一个bug,只有第一次正常,到后面又出现刚刚的问题了。

解决Vue中el-select第二次选择选项时才会显示上一个选项的响应结果

这是什么原因呢,这是由于Vue的响应性机制造成的。所以需要在查询时先重置变量内容,下面是完整的代码。

function search() {
    //重置变量内容
    checkNames = [];
    isDisplay.value = false;
    //发送请求,获得响应
    axios.get(getServerUrl() + "/getCheckByClass/" + classId.value)
        .then((response) => {
            const respData = response.data;
            console.log(respData.data);
            checkNames = respData.data;
        //响应后更改状态
            isDisplay.value = true;
        })
}

问题到这里就解决了文章来源地址https://www.toymoban.com/news/detail-666489.html

到了这里,关于解决Vue中el-select第二次选择选项时才会显示上一个选项的响应结果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue+ElementUI el-select选择器:绑定的值为对象

    业务需求: el-select选择器,后台接口需要的参数为name,name会存在重复情况,前端唯一标识选择用id,所以最后决定使用select绑定对象值将数据保存下来。 实现思路: 常规的select选择器,v-model 形式绑定的参数只能是boolean,string,number,但是仔细翻阅官方文档发现,selelct是可以

    2024年02月14日
    浏览(33)
  • element ui多选下拉组件(el-select)tag数量过多处理解决办法(二次封装)

    如下图所示,当标签选择过多时,会占用过多空间 期待效果:超过n行就自动省略,并可以进行展开收起,下图是实现后的效果图 实现分析: 通过extends继承el-select组件 将select源码的template部分粘贴到封装的组件中,以此来操作展开、收起等需要操作dom的部分 监听selected(已选择

    2024年02月13日
    浏览(32)
  • vue拿到下拉框el-select的选择项的value和label

    1.单独一个下拉框时 2.el-table每行数据都有下拉框时   思路: 1.首先选择下拉框事件拿到选择的这行数据scope.row  2.其次去遍历绑定的下拉框数据,使用find()方法查找item.value === row.value  3.找到则返回对应的row.label   4.最后将label值以键值对形式加到row对象中 代码实例:

    2024年02月11日
    浏览(83)
  • 解决element-ui中的el-select选择器无法显示选中内容的问题

    问题描述: 排查方法: 检查数据控制台是否报错,无报错 检查change是否触发,会触发 最后开始百度,查看文档  官方文档有这么一段话,就是属性一定要挂载到data上,不然无法检测。 最后解决: 排查到我的form表单,在定义表单属性的时候,没有在data中定义该字段。 总结

    2024年01月23日
    浏览(41)
  • el-select选项过多导致页面卡顿,路由跳转卡顿

    1.使用Virtualized Select 虚拟化选择器,页面就不卡了 2.el-select做分页,后端可能会不太想改,可以按照需求用computer做分页 3.可以使用滚动加载与自定义筛选 我看过的文章1:解决el-select数据量过大导致页面卡顿 文章2:el-select选项过多导致卡顿的解决方案 文章3:对el-select进行

    2024年01月24日
    浏览(23)
  • el-select范围选择框

    仅供参考,具体的实现可能根据自己的需要修改 ,仅供参考!仅供参考!仅供参考!

    2024年02月11日
    浏览(31)
  • element el-select下拉框选择失效

    2023.1.11今天我学习了使用element el-select组件下拉框选择数据失效的原因以及解决办法。 如图:   当我已经选择启用状态的时候,然后点击停用状态没反应。 是因为在配置表单的过程中,重复使用了这个字段。 如: 就是在表单中重复使用了status这个字段,然后导致选择失效。

    2024年02月16日
    浏览(30)
  • vue2 - 详细介绍element UI中在el-select嵌套el-tree树形控件实现下拉选择树型结构数据的效果实例(组件封装)

    在项目上常用使用到 el-select 和 el-tree 组合实现,记录下两者结合的实现过程。(代码以及注释清晰明了,代码直接使用即可) 要求根据项目接口提供的数据,el-tree 里的数据是一次性返回来的,点击最后一层级时,请求接口,在点击层级下方追加数据追加的数据要显示勾

    2024年04月15日
    浏览(43)
  • el-select 在iOS手机上,无法唤起软键盘以及二次点击问题

    问题 element UI 中有一个 el-select 组件。我们经常用它来实现下拉框功能。 但是在手机上使用时,发现iOS手机上,该组件无法唤起软键盘。 主要是因为 组件中, input 上有一个 readonly 属性,而该属性规定输入字段为只读。阻止了用户对值进行修改,直到满足某些条件才行。 方

    2024年02月11日
    浏览(25)
  • elementUI --- el-select 下拉框 日历 级联选择

    element UI 组件库中的 select 选择器 中下拉列表的样式,在页面渲染的时候,总是渲染为仅次于body级别的div ,这样子覆盖样子会影响全局其他的select选择器下拉框样式,试图通过给el-select加父标签来覆盖,然而并没有卵用。 控制台看到的渲染结果: 解决方法: 通过 popper-cla

    2024年02月15日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包