el-select中多选回显数据后没法重新选择和更改

2023-11-17

我用element select 多选回显的时候 回显正常, 不能点击清除,不能选择改变数据, 然后去搜了这篇文章文章链接

博主解释要在select标签上加一个强制渲染 ,如下图

<el-select v-model="list" filterable multiple  @change="$forceUpdate()"></el-select>

在编辑数据时,使用v-model绑定 el-select多选,但无法进行编辑、删除,这是因为由于一些嵌套特别深的数据,导致数据更新了,但是页面却没有重新渲染

需要使用this.$forceUpdate()迫使 Vue 实例重新渲染。

在el-select 中使用@change="$forceUpdate()",标签里加个@change=“$forceUpdate()” 就好了

但是,重点来了

加了之后 , 功能其他的一切都正常

表单里这个el-select的rules校验规则就不生效了…

仔细查看数据结构后发现数据有问题

错误数据(rules校验失效)
在这里插入图片描述
正确数据(一切正常)在这里插入图片描述
前者和后者同样是数组, __proto__原型却不相同,需要我去深究一下

答案来了

__ob __会指向一个Observer对象,每个被双向绑定的对象元素(数组也是对象)都会有一个__ob __ ,而且是单例的

function observe (value, asRootData) {    
    if (!isObject(value) || value instanceof VNode) {    //必须是对象才能有__ob__ 属性
      return
    }
    var ob;
    if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {    //__ob__ 只能有一个
      ob = value.__ob__;
    } else if (
      shouldObserve &&                           //暂时没看懂    
      !isServerRendering() &&
      (Array.isArray(value) || isPlainObject(value)) &&
      Object.isExtensible(value) &&
      !value._isVue
    ) {
      ob = new Observer(value);
    }

    return ob
  }

Observe 对象里面有什么

data{
   obj:{
       a:1
   }
},

export class Observer {
  value: any;   //指的是双向绑定的那个对象,如上述例子 value 就指向 obj
  dep: Dep;   //  存的是当前对象双向绑定的的dep。  obj 里面会有一个__ob__,这个__ob__.dep 和 obj 的 dep 存放的东西是一样的
              //  或者说 __ob__.dep  和  obj  依赖收集的那个 dep 里面放的东西是一样的。                                                                                                                        
  vmCount: number; // number of vms that have this object as root $data
  constructor (value: any) {
    this.value = value
    this.dep = new Dep()
    this.vmCount = 0
  }
}

何时会往这个 __ob __ 添加 内容

function defineReactive ( obj,  key, val, customSetter, shallow ) {
    var dep = new Dep();

    var childOb = !shallow && observe(val);
    Object.defineProperty(obj, key, {
      enumerable: true,
      configurable: true,
      get: function reactiveGetter () {
        var value = getter ? getter.call(obj) : val;
        if (Dep.target) {
          dep.depend();
          if (childOb) {
            childOb.dep.depend();
            if (Array.isArray(value)) {
              dependArray(value);
            }
          }
        }
        return value
      },
    });
  }


data{
   obj:{
       a:1
   }
},

如果 双向绑定的这个obj 是个对象,那么 var childOb 会是一个Observe 对象,否则是一个null。例如当为obj双向绑定的时候,会调用 obj.__ob __.dep.depend() 添加一个 同样的watcher。

后来我发现 vm.$delete 也会使用到最后__ob __

export function del (target: Array<any> | Object, key: any) {

 ......

  const ob = (target: any).__ob__

  ......

  delete target[key]   

 ......

  ob.dep.notify()   // ⑥
}

附原文链接

2021-9-24备注:其实数据的不一致区别在于这个对象是否被vue所观察 , 比如说一个对象被观察后绑定到dom上 , 数据变化后dom随之改变的道理是一样的 . 尽可能的用Object.asign()去重新赋值一下会比较好

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

el-select中多选回显数据后没法重新选择和更改 的相关文章

  • 如何更改传单中功能集的样式?

    我正在看等值区域的例子 https leafletjs com examples choropleth https leafletjs com examples choropleth 这是他们使用的数据源 type Feature prop
  • HTML/VBA Click 事件未触发

    这是我第一次在 StackOverflow 上发布问题 到目前为止 我已经能够通过 VBA 帮助论坛解决我的大部分问题 我的问题很简单 我有一个自动数据拉取 我需要在其中导出数据 我过去曾在这方面取得过成功 但这次略有不同 我尝试单击以生成
  • 动态速度计 javascript 或 jquery 插件

    我希望有动态ajax插件在页面上显示速度计 一个想法是我设置一个背景并旋转针 有人知道相关插件吗 这里有一些供您参考 http bernii github com gauge js http bernii github com gauge
  • Node js 使用中间件重定向进行过多重定向

    在我的 Node js 应用程序 我使用的是express 4 x 中 我想检查用户是否已登录 如果用户未登录 我想重定向到我的登录页面 然后我在中间件中这样做 服务器 js app use function req res next if
  • 在Javascript中按降序对字符串进行排序(最有效)?

    W3Schools 有这个例子 var fruits Banana Orange Apple Mango fruits sort fruits reverse 这是在 Javascript 中按降序对字符串进行排序的最有效方法吗 Updat
  • jquery 验证错误位置

    这看起来很简单 但我无法弄清楚 我正在使用 jquery 验证插件 我验证所有文件 但我想要的是在输入文本行中显示验证消息警报 例如在电子邮件输入中 请填写电子邮件地址 但现在它出现在所有字段下 在我的html中
  • jQuery 选择 # id 以单词为前缀,计数器为后缀

    有没有办法用 jQuery 选择所有带有前缀 my 和后缀 0 9 的 id 像这样的 my 1 4 还是可以用循环来实现 div div div div div div div div div div 第一个想法 似乎效果很好 div i
  • 使用 CryptoJS 更改密钥 [重复]

    这个问题在这里已经有答案了 我正在使用 CryptoJS 来加密和解密文本 在这里 我只是获取消息并显示加密和解密消息 我使用DES算法进行加密和解密 这是我的 HTML 文件
  • jquery window.open 在 ajax 成功中被阻止

    尝试在我的 ajax 成功调用中打开一个新的浏览器窗口 但是 它被阻止为弹出窗口 我做了一些搜索 发现用户事件需要绑定到 window open 才能避免这种情况发生 我还找到了这个解决方案 您可以在 ajax 之前打开一个空白窗口 然后在
  • 如何流式传输 OpenAI 的完成 API?

    我想流式传输结果通过 OpenAI 的 API 完成 https beta openai com docs api reference completions 该文档提到使用服务器发送的事件 https developer mozilla
  • IE11不监听MSFullscreenChange事件

    我正在尝试使用 Bigscreen js 在 IE11 中使用全屏 但 IE11 不监听 MS FullscreenChange 事件 document addEventListener MSFullscreenChange functio
  • 淡出和循环一组 div 的最佳方式

    假设我有以下 div div class a You are funny div div class b You are smart div div class c You are cool div 最好的展示方式是什么div a持续 5
  • 将 javascript 整数转换为字节数组并返回

    function intFromBytes x var val 0 for var i 0 i lt x length i val x i if i lt x length 1 val val lt lt 8 return val func
  • Chartjs刻度标签位置

    尝试让 Y 轴刻度标签看起来像image https i stack imgur com XgoxX png 位于秤顶部且不旋转 缩放选项当前如下所示 scales yAxes id temp scaleLabel display true
  • 类型“typeof import("/home/kartik/Desktop/Ecommerce/ecommerce/node_modules/firebase/index")”上不存在属性“auth”。 TS(2339)

    我是 FireBase 的初学者 我正在尝试使用 Angular 通过 FireBase 实现 Google 登录 我在 auth 时收到上述错误 我特此附上login component ts和package json package l
  • 如何将函数内的捕获错误传递给父级

    我有这几行代码示例 想知道下面的逻辑到底如何 try var response child console log why here catch err console log should show this err function c
  • JavaScript onresize 事件多次触发

    我在尝试仅在触发 onresize 事件时运行一次函数时遇到一些麻烦 我已经看过这个问题DOM onresize 事件 https stackoverflow com questions 1500312 javascript onresiz
  • 无法在前端使用 JavaScript Fetch API 将文件上传到 FastAPI 后端

    我正在尝试弄清楚如何将图像发送到我的 API 并验证生成的token那是在header的请求 到目前为止 这就是我所处的位置 app post endreProfilbilde async def endreProfilbilde requ
  • 数据表日期范围过滤器

    如何添加日期范围过滤器 like From To 我开始进行常规搜索和分页等工作 但我不知道如何制作日期范围过滤器 我正在使用数据表 1 10 11 版本 My code var oTable function callFilesTable
  • 在 Javascript 中减少/分组数组

    基于this https stackoverflow com a 40774906 3254598例如 我想以稍微不同的方式按对象进行分组 结果应该如下 key audi items make audi model r8 year 2012

随机推荐

  • QT笔记- 对QSring字符串内容进行过滤筛选或对QLineEdi的可输入内容进行控制,使其不含某些字符、只含某些字符或只含特定格式的字符串,如只含字母数字和下划线

    QSring字符串内容的过滤筛选 QString类函数contains 用于判断字符串中是否含有某些字符 其有两个重载函数 第一个是简单筛选 第二个是使用 正则表达式 之后有解释 进行筛选 两函数原型为 bool QString conta
  • protocol buffer 编解码

    平时的开发中使用pb格式协议较多 大致了解了一下pb的编解码 即序列化和反序列化 本文参考官方文档 https developers google com protocol buffers docs encoding hl zh cn 先看
  • Word去除多余的页眉

    word去除多余的页眉 1 在正式页眉开始的页面点击鼠标 此时光标位于要删除页眉下划线页的首部 2 单击上方菜单栏的 页面布局 分隔符 分节符 下一页 3 在正式页眉开始的地方双击鼠标 进入 页眉编辑 状态 4 单击 页眉和页脚 将 链接到
  • SVN时代...

    SourceForge开始全面支持Subversion 这真是个好消息 这预示着CVS独霸天下的时代快要结束 SVN时代就要来临 和CVS比起来 SVN的确很强大 这就像它的出现就是为了取代CVS一样 它的目标快要实现了 具体的功能特性大家
  • Cocos2d-x 3.17.1 Android Studio环境搭建和创建编译项目和真机调试

    eclipse NDK参考 https www cnblogs com l d d p 6531557 html 最近项目上需要用Cocos2d x在Android智能硬件上进行开发 很早之前搭建过Cocos2d x3 15 1 Eclip
  • 利用IDM实现百度云满速下载

    一 IDM Internet Download Manager 简称 IDM 是一种将下载速度提高5倍的工具 可以恢复和安排下载 由于连接丢失 网络问题 计算机关机或意外停电等原因 全面的错误恢复和恢复功能将重新启动中断或中断的下载 简单的
  • MATLAB绘制正弦函数与余弦函数的线性组合曲线

    h0 figure toolbar none position 200 150 450 350 name 实例11 x 0 pi 20 2 pi y1 sin x y2 cos x h1 stem x y1 y2 画出线性组合的图 hold
  • SQL注入——学生选课系统注入

    目录 前言 一 实验环境 二 实验步骤 1 万能密码 2 堆叠注入 3 报错注入 4 时间盲注 前言 本次实验利用教师指定的学生选课管理系统进行SQL注入 包含万能密码登录 堆叠注入 报错注入和时间盲注 一 实验环境 Windows10虚拟
  • QT 15--获取任何种类文件的某些文件属性:大小、创建时间、上次修改时间等等

    1 首先说一些 如果是mainwindow的QT工程 如果打算做自己手写ui 界面的话 该如何将自己写的内容添加到mainwindow界面呢 方法为 新建一个widget类 然后将所有零件都用布局布置好后 只需将总布局添加到widet 然后
  • KMP时间复杂度分析

    比较过程分析 比较次数 比较次数 红色 蓝色 蓝色部分是相比暴力求解 节省下的比较次数 周期 从比较次数可以看出 呈现 1 1 1 1 5 这样的周期 一个周期内的比较次数 8 周期长度 5 周期个数 n 5 比较总次数 周期个数 一个周期
  • 学成在线笔记+踩坑(10)——课程搜索、课程发布时同步索引库。

    导航 黑马Java笔记 踩坑汇总 JavaSE JavaWeb SSM SpringBoot 瑞吉外卖 SpringCloud 黑马旅游 谷粒商城 学成在线 牛客面试题 java黑马笔记 目录 1 检索模块 需求分析 1 1 全文检索介绍
  • H3 GPIO笔记

    NanoPi NEO Core最近买了一块 这个板子使用全志H3 查看H3的数据手册 把GPIO这部分做个笔记 H3有7组GPIO 如下 分别是PA PC PD PE PF PG PL 没有PB这一组 PA有22个端口 PC有19个端口 P
  • 【LeetCode题解】1475、商品折扣后的最终价格

    题目 给你一个数组 prices 其中 prices i 是商店里第 i 件商品的价格 商店里正在进行促销活动 如果你要买第 i 件商品 那么你可以得到与 prices j 相等的折扣 其中 j 是满足 j gt i 且 prices j
  • CSS动画:Transition与Animation

    本文总结CSS3中两个用来做动画的属性 一个是transition 另一个是animation 差异比较 CSS3 差异 transition 在给定的持续时间内平滑地更改属性值 从一个值到另一个值 也就是只需要指定开始与结束的参数 参数改
  • 让汽车的全景环视更智能更安全!

    随着现代汽车安全技术的进步 我们看到诸如全景环视等先进驾驶辅助 ADAS 技术成为现代汽车的新标准 本演示展示了如何通过精确的实时反射和AI来检测障碍 以提升全景环视系统的性能 让汽车驾驶更安全 尤其是 当全景环视系统内嵌Imaginati
  • cesium-添加点并且可以编辑

    完整代码
  • 05_Numpy任意行&列的删除方法(numpy.delete)

    05 Numpy任意行 列的删除方法 numpy delete 函数Numpy delete 可以删除ndarray数组中任意的行或者列 指定要删除的轴 维度 和要删除的位置 行号 列号 也可以通过切片或列表选择多个行或者列的编号 对以下的
  • 【Unity Shaders】抖音变身漫画1

    先来看一下手机拍出来的效果 我们发现有一张人像变成了卡通漫画脸 其它的只是做了一些图像处理 你可以再拍几张看一下 会发现千篇一律的大眼 小嘴有没有 你想的没错 这个是AI换脸技术 抖音特效里有很多了 把这个漫画脸再加上对图像的漫画处理 最后
  • 解读CUDA Compiler Driver NVCC - Ch.5

    前言 前面几篇文章 我们了解了NVCC的作用 nvcc编译的two stage 每个stage做了什么 怎么去选择虚拟架构和真实架构 JIT编译的原理 好处和弊端以及解决方案 本文我们将了解几个实际的nvcc编译命令 Base Notati
  • el-select中多选回显数据后没法重新选择和更改

    我用element select 多选回显的时候 回显正常 不能点击清除 不能选择改变数据 然后去搜了这篇文章文章链接 博主解释要在select标签上加一个强制渲染 如下图