记vue修改数组属性,dom不发生变化的问题
目录:
开篇
今天在写vue的时候,出现了一个以前可能没遇到的问题。我利用一个数组记录列表下按钮的启用、禁用状态,但我点击某个列表项按钮后,会修改当前数组里面的状态值使其解除禁用状态,我一开始的代码写的是:
<tr :key="index" v-for="(device,index) in devices">
<td>
<button type="button" class="btn btn-success btn-sm btn-block mb10" @click="connectTsc(index, device.address)">连接</button>
<button type="button" class="btn btn-danger btn-sm btn-block mb10" :disabled="allowPrintDevices[index]" @click="disConnectTsc()">断开</button>
<button type="button" class="btn btn-primary btn-sm btn-block mb10" :disabled="allowPrintDevices[index]" @click="printText(index, device.address)">打印文字</button>
</td>
</tr>
this.allowPrintDevices[index] = false
这样是不会成功的。
正确的姿势
this.$set(this.allowPrintDevices, deviceIndex, false)
为什么
当vue中改变对象元素的情况下,不会重新渲染dom元素,这时候可以用vue的$set方法。
一般情况下就可以实现功能了,也就是改变对象元素后,会重新渲染dom,如果当你使用挺好this.$set方法是,发现并不管用,那么应该就是你改变的对象层级太深了,没有办法触发reader函数,需要自己手动触发一下、
this.$forceUpdate()
// 举例
this.$set(this.data[id],"status",true)
$set
官方:如果在实例创建之后添加新的属性到实例上,它不会触发视图更新
参考文献:Vue-给对象新增属性(使用Vue.$set())、深入响应式原理
记vue修改数组属性,dom不发生变化的问题的更多相关文章
- vue修改数组元素方法
示例代码 <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF- ...
- vue中修改数组,dom未更新的问题
vue中我们会频繁操作各种数据,但有时候发现修改完数据以后,dom并未更新? 比如有一个数组对象: obj = [{'name': 'joy'},{'name': 'bowen'}] 我要循坏插入某个 ...
- vue修改对象属性值视图上没有更新
data(){ return { obj:{ name:' ' } } } 方法一: this.$set(this.obj, 'name', '新的值'); 方法二; Vue.set(vm.obj, ...
- js循环修改数组属性key值
var keyMap = { deviceUid: "id", deviceType: "typeName", deviceCode: "code&q ...
- Vue 更改数组中的值,页面不刷新问题。解决方法+原理说明
一.Vue 更改数组中的值,页面不刷新问题 data{ hobby:["打游戏","想静静","发呆"] } 1.错误写法(页面不刷新): ...
- Vue 改变数组中对象的属性不重新渲染View的解决方案
Vue 改变数组中对象的属性不重新渲染View的解决方案 在解决问题之前,我们先来了解下 vue响应性原理: Vue最显著的一个功能是响应系统-- 模型只是一个普通对象,修改对象则会更新视图.受到ja ...
- Vue 修改对象(数组)没有立即生效
在写项目时遇到了给数组赋值后,出现赋值延时的问题,解决办法如下 // Vue 不能检测以下变动的数组: // 当你利用索引直接设置一个项时,例如: vm.items[indexOfItem] = ne ...
- 使用DOM解析XML文件,、读取xml文件、保存xml、增加节点、修改节点属性、删除节点
使用的xml文件 <?xml version="1.0" encoding="GB2312" ?> <PhoneInfo> <Br ...
- VUE项目中使用this.$forceUpdate();解决页面v-for中修改item属性值后页面v-if不改变的问题
VUE项目中使用this.$forceUpdate();解决页面v-for中修改item属性值后页面v-if不改变的问题:https://blog.csdn.net/jerrica/article/d ...
- Vue方法中修改数组某一项元素而不能响应式更新
<template> <div> <ul> <li v-for="(item, i) in ms" :key="i"& ...
随机推荐
- 【转载】 Locust 官方文档
链接:https://www.jianshu.com/p/40102e9a24cb 安装 一般直接通过 pip 就可以安装: $ pip install locust 注意: Locust 1.x 版 ...
- Vue3封装一个ElementPlus自定义上传组件2--无弹窗
Vue3封装一个ElementPlus自定义上传组件2--无弹窗 写在前面: 无弹窗的上传组件它来了,依旧是小巧又好用,只不过这回我用的是前端直传的方式,采用http-request进行文件上传,中间 ...
- Qt开源作品15-视频监控画面
一.前言 视频监控系统在整个安防领域,已经做到了烂大街的程序,全国起码几百家公司做过类似的系统,当然这一方面的需求量也是非常旺盛的,各种定制化的需求越来越多,尤其是这几年借着人脸识别的东风,发展更加迅 ...
- [转]分享几款微软官方Office卸载工具与使用方法
更换Office版本时,需要先卸载旧版Office,如果是卸载普通软件,我们只需在"控制面板"里点击"卸载"就能轻松实现,但这种方法对卸载Office 可能无效 ...
- MySql中MySqlParameter的用法
在C#中,向表person插入一条数据(表person包括两列:id和name),使用MySqlParameter定义表中各列的值. static void Main(string[] args) { ...
- JAVA Swing日期选择控件datepicker的使用
声明:本控件来自互联网,仅可应用于个人项目,不可商用,如您未遵守造成的任何问题请自行承担点击下载 datepicker.jar 使用方法1.导入 在eclipse中,单击你的项目名,右键–>Bu ...
- [炼丹术]YOLOR目标检测训练模型学习总结
YOLOR目标检测训练模型学习总结 性能测试 python test.py --data data/cocoaml --img 320 --batch 8 --conf 0.001 --iou 0.6 ...
- python SQLAlchemy ORM——从零开始学习03 如何针对数据库信息进行排序
03 如何进行排序 3-1准备工作: 因为要排序,所以需要随机多谢数据,model见后文.也需要random进行随机 from model import User, Engine from sqlal ...
- JS利用浏览器进行语言识别
JS利用浏览器进行语言识别 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- C++:异常处理
C++的异常处理机制是由三部分组成:检查(try).抛出(throw)和捕获(catch).需要检查的语句放到try中:throw用来当出现异常时发出一个异常信息:catch用来捕获异常信息,且处理它 ...