vue2 element-ui el-checkbox视图不更新问题及解决

 更新时间:2024年12月26日 11:08:04   作者:木有名字就是最好的名字  
作者在开发过程中遇到了视图不更新的问题,最终通过改变一个无关紧要的响应式数据来解决,让视图发生改变

vue2 element-ui el-checkbox视图不更新

今天在开发过程发现一个问题,如标题所描述的,我在更改了data(){return{}}里的数据后, 也就是对 el-checkbox 的 v-model 绑定了一个 data() 里面的数据,与之对应的视图没有发生变化

我之所以 断定 我data() 里的数据发生了变化,而视图没有发生变化,是因为 在chrome 的 插件 vue devtools 中 确认了 data() 数据是发生了改变, 也就证明el-checkbox 的v-model绑定的boolean 值发生了改变,此时视图应该 按照 v-model="false" ==> v-model="true" 从 未勾选状态==>勾选状态 但是 页面一直没有更新。

在确认自己不是因为低级错误而导致的 视图不更新后, 对该问题进行了 不同的处理

1: 百度: 使用 $set() 、使用froceUpdate() 这两者都不起作用

既然 已经明确了 数据是发生了变化,依赖数据的视图没有发生改变, 那么 可以通过 较为偏激的方法 用v-if="true" / v-if="false" 的方法 将组件销毁再重新挂载, (此种方法过于 偏激,而且相对另类 不推荐使用)

既然有通过 v-if 的方法 强行让 元素重新渲染,那么 是否可以利用 vue 的一些特性进行类似的操作呢?

我个人观点

vue 响应式 可以通过 数据驱动页面的更新 加上 diff算法, 可以试着给 el-checkbox 组件 一个 无关紧要的属性

例如 :

data-xxx=“响应式数据” 通过更改 该响应式数据 让vue 在进行diff算法中,发现虚拟Dom el-checkbox 的其中一个 data-xxx 属性发生变化,从而 让其触发该组件的 渲染,以达到 v-model 绑定的值改变 所对应的 视图发生变化。

  • 例子:
<el-checkbox v-model="list[index].obj[value].checked" :data-a="checked">
  • 伪代码:
function changeValue(){
// 将 list[index].obj[value].checked 为 false 改为 true

this.list[index].obj[value].checked = true // 此时视图 并没有因为 数据的变化 而 从 未勾选变成勾选状态

// 更改一个 无关紧要的 数值
this.checked = !this.checked // 此处 无论checked 是什么 都不影响 目的是让vue 去重新渲染 el-checkbox 这个组件

}

总结

其实在一般的vue 开发中,如果 响应式数据 不是那种 非常复杂的数据类型一般不会出现响应式数据变化而视图不更行的情况,

但 上述例子中 list是一个数组,数组里面有多个属性,其中一个属性为一个对象,而我们需要改变的值就是这个对象的其中一个属性, 可能 在vue 的双向绑定中,

由于 list 是一个相对复杂的数据类型,当深层次里的属性发生了 改变, vue没法做到 数据驱动 视图更新,

当我们非常确认数据已经更新了, 仅仅是视图没有发生变化,此时 要做的就是 能让 视图发生改变的操作 通过改变一个无关紧要的 响应式数据 从而 让 组件进行 重新渲染操作 无疑是一个 不错的 解决方案

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue实现滑动解锁功能

    vue实现滑动解锁功能

    这篇文章主要为大家详细介绍了vue实现滑动解锁功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • el-tree树组件懒加载(后端上千条数据前端进行处理)

    el-tree树组件懒加载(后端上千条数据前端进行处理)

    本文主要介绍了el-tree树组件懒加载(后端上千条数据前端进行处理),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • vuejs手把手教你写一个完整的购物车实例代码

    vuejs手把手教你写一个完整的购物车实例代码

    这篇文章主要介绍了vuejs-手把手教你写一个完整的购物车实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • 代替Vue Cli的全新脚手架工具create vue示例解析

    代替Vue Cli的全新脚手架工具create vue示例解析

    这篇文章主要为大家介绍了代替Vue Cli的全新脚手架工具create vue示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • vue中input框的禁用和可输入问题

    vue中input框的禁用和可输入问题

    这篇文章主要介绍了vue input框的禁用和可输入问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • 从vue-router看前端路由的两种实现

    从vue-router看前端路由的两种实现

    本文由浅入深观摩vue-router源码是如何通过hash与History interface两种方式实现前端路由,介绍了相关原理,并对比了两种方式的优缺点与注意事项。最后分析了如何实现可以直接从文件系统加载而不借助后端服务器的Vue单页应用。
    2021-05-05
  • 一个可复用的vue分页组件

    一个可复用的vue分页组件

    这篇文章主要为大家详细介绍了一个可复用的vue分页组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Vue项目中引入外部文件的方法(css、js、less)

    Vue项目中引入外部文件的方法(css、js、less)

    本篇文章主要介绍了Vue项目中引入外部文件的方法(css、js、less),非常具有实用价值,需要的朋友可以参考下
    2017-07-07
  • vue自定义指令实现v-tap插件

    vue自定义指令实现v-tap插件

    这篇文章主要为大家详细介绍了vue自定义指令实现v-tap插件的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • vue大型项目之分模块运行/打包的实现

    vue大型项目之分模块运行/打包的实现

    这篇文章主要介绍了vue大型项目之分模块运行/打包的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09

最新评论