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-simple-verify实现滑动验证码功能

    vue-simple-verify实现滑动验证码功能

    登录页面经常会需要滑动验证码的情况,使用vue插件vue-simple-verify就可以轻松实现,下面小编给大家分享vue-simple-verify实现滑动验证码功能,感兴趣的朋友一起看看吧
    2024-06-06
  • Vue监听Enter键的方法总结与区别

    Vue监听Enter键的方法总结与区别

    这篇文章主要给大家介绍了关于Vue监听Enter键的方法与区别的相关资料,在Vue中我们可以通过监听键盘事件来实现回车键切换焦点的功能,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • vue3+ts+elementPLus实现v-preview指令

    vue3+ts+elementPLus实现v-preview指令

    本文主要介绍了vue3+ts+elementPLus实现v-preview指令,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • 7个适用于Vue 3的高颜值UI组件库

    7个适用于Vue 3的高颜值UI组件库

    这篇文章主要给大家分享介绍了7个适用于Vue 3的高颜值UI组件库,合理利用,又或者学习借鉴都是不错的选择,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • vue下history模式刷新后404错误解决方法

    vue下history模式刷新后404错误解决方法

    这篇文章主要介绍了vue下history模式刷新后404错误解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • vue设置导航栏、侧边栏为公共页面的例子

    vue设置导航栏、侧边栏为公共页面的例子

    今天小编就为大家分享一篇vue设置导航栏、侧边栏为公共页面的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • vue radio单选框,获取当前项(每一项)的value值操作

    vue radio单选框,获取当前项(每一项)的value值操作

    这篇文章主要介绍了vue radio单选框,获取当前项(每一项)的value值操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • vue.js引入外部CSS样式和外部JS文件的方法

    vue.js引入外部CSS样式和外部JS文件的方法

    这篇文章主要介绍了vue.js引入外部CSS样式和外部JS文件的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • vue中使用typescript配置步骤

    vue中使用typescript配置步骤

    本文主要介绍了vue中使用typescript配置,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • vue-cli中的图片资源存放位置详解

    vue-cli中的图片资源存放位置详解

    这篇文章主要介绍了vue-cli中的图片资源存放位置,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09

最新评论