vue修改对象的属性值后页面不重新渲染的实例


Posted in Javascript onAugust 09, 2018

最近项目在使用vue,遇到几次修改了对象的属性后,页面并不重新渲染,场景如下:

HTML页面如下:

<template v-for="item in tableData">
    <div :class="{'redBorder':item.red}">
    <div>{{ item.name}}</div>
    <div>
     <el-button size="mini" @click="clickBtn(item.id)" type="info">编辑</el-button>
     <p class="el-icon-error" v-show="item.tip"></p>
    </div>
    </div>
</template>

js部分如下:

<script>
 export default {
  data() {
  return {
   tableData:[{id:0,name:"lili",red:false,tip:false}]
  }
  },
 
  methods: {
 clickBtn(id){
 this.tableData[id].red=true;
 this.tableData[id].tip=true; 
 }
 }
}
</script>

绑定的class是加一个红色的边框,如下:

.redBorder{
 border:1px solid #f00;
}

在项目中点击button后不出现红色边框和提示错误框,打开debugger查看,发现运行到了这里却没有执行,tableData中的值并没有改变,这个方法在以前使用时会起作用,可能是这次的项目比较复杂引起的,具体原因不明。

后通过查找资料修改为使用$set来设定修改值,js如下:

this.$set(this.tableData[id],"red",true);

但是依然没有起作用,打开debugger发现tableData的值修改成功,没有渲染到页面上,查找的资料也是比较凌乱,并不能解决问题,后请教大神,才知道是数据层次太多,没有触发render函数进行自动更新,需手动调用,调用方式如下:

this.$forceUpdate();

js完整代码如下:

<script>
 export default {
  data() {
  return {
   tableData:[{id:0,name:"lili",red:false,tip:false}]
  }
  },
 
  methods: {
 clickBtn(id){
 this.$forceUpdate();
 this.$set(this.tableData[id],"red",true);
 this.$set(this.tableData[id],"tip",true); 
 }}}
</script>

以上是我解决问题的全过程,有不对的地方请指教。

这篇vue修改对象的属性值后页面不重新渲染的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
div层的移动及性能优化
Nov 16 Javascript
在IE和VB中支持png图片透明效果的实现方法(vb源码打包)
Apr 01 Javascript
js实现翻页后保持checkbox选中状态的实现方法
Nov 03 Javascript
JavaScript创建类/对象的几种方式概述及实例
May 06 Javascript
JavaScript之IE的fireEvent方法详细解析
Nov 20 Javascript
使用jQuery Rotare实现微信大转盘抽奖功能
Jun 20 Javascript
node网页分段渲染详解
Sep 05 Javascript
Vue.js 2.5新特性介绍(推荐)
Oct 24 Javascript
vue中的event bus非父子组件通信解析
Oct 27 Javascript
详解webpack打包后如何调试的方法步骤
Nov 07 Javascript
通过实例了解Javascript柯里化流程
Mar 03 Javascript
jQuery编写QQ简易聊天框
Aug 27 jQuery
vue异步axios获取的数据渲染到页面的方法
Aug 09 #Javascript
vue2.0的虚拟DOM渲染思路分析
Aug 09 #Javascript
Angular动画实现的2种方式以及添加购物车动画实例代码
Aug 09 #Javascript
Vue.js 通过jQuery ajax获取数据实现更新后重新渲染页面的方法
Aug 09 #jQuery
详解Vue开发微信H5微信分享签名失败问题解决方案
Aug 09 #Javascript
JQuery Ajax动态加载Table数据的实例讲解
Aug 09 #jQuery
详解在React中跨组件分发状态的三种方法
Aug 09 #Javascript
You might like
为什么那些咖啡爱好者大多看不上连锁咖啡店?
2021/03/06 咖啡文化
ThinkPHP中RBAC类的四种用法分析
2014/11/24 PHP
PHP 的Opcache加速的使用方法
2017/12/29 PHP
通过源码解析Laravel的依赖注入
2018/01/22 PHP
PHP实现提取多维数组指定一列的方法总结
2019/12/04 PHP
Jquery Ajax的Get方式时需要注意URL地方
2011/04/07 Javascript
深入了解javascript中的prototype与继承
2013/04/14 Javascript
在jquery中combobox多选的不兼容问题总结
2013/12/24 Javascript
原生js实现淘宝首页点击按钮缓慢回到顶部效果
2014/04/06 Javascript
JS的数组迭代方法
2015/02/05 Javascript
JS动态显示表格上下frame的方法
2015/03/31 Javascript
javascript搜索框效果实现方法
2015/05/14 Javascript
ui组件之input多选下拉实现方法(带有搜索功能)
2016/07/14 Javascript
js闭包用法实例详解
2016/12/13 Javascript
全站最详细的Vuex教程
2018/04/13 Javascript
Vue+axios实现统一接口管理的方法
2018/07/23 Javascript
Nodejs把接收图片base64格式保存为文件存储到服务器上
2018/09/26 NodeJs
angularJs中ng-model-options设置数据同步的方法
2018/09/30 Javascript
简述pm2常用命令集合及配置文件说明
2019/05/30 Javascript
Python处理RSS、ATOM模块FEEDPARSER介绍
2015/02/18 Python
Python中关键字nonlocal和global的声明与解析
2017/03/12 Python
jupyter notebook 中输出pyecharts图实例
2020/04/23 Python
pytorch中的transforms模块实例详解
2019/12/31 Python
基于python修改srt字幕的时间轴
2020/02/03 Python
pytorch 计算ConvTranspose1d输出特征大小方式
2020/06/23 Python
浅析PyCharm 的初始设置(知道)
2020/10/12 Python
pandas按照列的值排序(某一列或者多列)
2020/12/13 Python
美国东北部户外服装和设备零售商:Eastern Mountain Sports
2016/10/05 全球购物
贝佳斯官方网站:Borghese
2020/05/08 全球购物
毕业典礼演讲稿
2014/05/13 职场文书
组织鉴定材料
2014/06/02 职场文书
2014年信用社工作总结
2014/11/25 职场文书
违纪检讨书范文
2015/01/27 职场文书
民事申诉状范本
2015/05/20 职场文书
2015年库房管理工作总结
2015/10/14 职场文书
css3 文字断裂效果
2022/04/22 HTML / CSS