vue 对象添加或删除成员时无法实时更新的解决方法


Posted in Javascript onMay 01, 2019

前阵子将项目搬上Vue的时候偶遇一个突发问题

当对象添加或删除成员时页面无法实时更新渲染,但是数组是正常的

目测是ob没有监听到对象的成员有变化

查看一些大家的求助回答是说ob监听的是数组length的变动 对象默认没有length 新增成员时不会自增length

所以监听不到对象的变化 最近大脑过于疲惫 懒得看文档了。。。

不多废话 解决方式直接上代码

在实例内部可以用$set和$delete

this.$set(this.age,'age',18);
this.$delete(this.age,'age');

也可以直接调用Vue的set和delete

let vm = new Vue({
  el : '#app',
  data : {
    age:{}
  }
});
Vue.set(vm.age,'age',18);
Vue.delete(vm.age,'age');

PS:vue给数组和对象进行增加删除字段不更新数据的解决方法 — Vue.set(object, key, value)

组件基本代码:

<style lang="sass">

</style>
<template>
<div>
  <div>
    <div>

    </div>
  </div>
</div>
</template>
<script>
  export default {
    data(){
      return {

      }
    },
    methods: {
      ceshi(){

      }
    }
  }
</script>

1.数组的增加,删除(数组的push等方法排除)

</style>
<template>
<div>
  <div>
    <div>
      <div v-for="item in items">
        <span>{{ item }}</span>
      </div>
      <button @click="ceshi">anniu</button>
    </div>
  </div>
</div>
</template>

<script>
  export default {
    data(){
      return {
        items: [11,22],
        obj: { a: 'aa', b: 'bb' }
      }
    },
    methods: {
      ceshi(){
        this.items[2] = 33; // 这样的写法数据是无法重新渲染的
      }
    }
  }
</script>

点击按钮操作ceshi事件前后,没发生变化

vue 对象添加或删除成员时无法实时更新的解决方法

解决方法:

就是利用数据的push方法是可以实现的

利用Vue.set方法

具体实现如下:

methods: {
  ceshi(){
    this.$set(this.items, 2, 33)
  }
},

同理,如果items: [{a: ‘11'}] ?> items: [{a: ‘11', b: ‘22'}]

<div v-for="item in items">
 <span v-for="(i, j) in item">{{ i }}--{{ j }}</span>
</div>

this.items[0] = Object.assign({}, this.items[0], { b: '22' });
this.$set(this.items, 0, this.items[0]);

2.给对象增加新属性(同理)

<template>
  <div>
    <div v-for="item in obj">
     <span>{{ item }}</span>
    </div>
  </div>
</template>

data(){
  return {
    obj: { a: 'aa', b: 'bb' }
  }
}

methods: {
  ceshi(){
    this.obj['c'] = '000'; // 不起作用
    this.$set(this.obj, 'c', '000'); //起作用 
  }
},

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
DIV外区域Click后关闭DIV的实现代码
Dec 21 Javascript
jquery遍历数组与筛选数组的方法
Nov 05 Javascript
jQuery.holdReady()使用方法
May 20 Javascript
理解JS绑定事件
Jan 19 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
May 17 Javascript
Angularjs中的ui-bootstrap的使用教程
Feb 19 Javascript
基于BootStrap实现简洁注册界面
Jul 20 Javascript
详解plotly.js 绘图库入门使用教程
Feb 23 Javascript
Vue实现导出excel表格功能
Mar 30 Javascript
微信小程序使用wxParse解析html的方法示例
Jan 17 Javascript
详细分析Node.js 模块系统
Jun 28 Javascript
Vue点击切换Class变化,实现Active当前样式操作
Jul 17 Javascript
JavaScript强制类型转换和隐式类型转换操作示例
May 01 #Javascript
Vue源码之关于vm.$delete()/Vue.use()内部原理详解
May 01 #Javascript
Vue.extend实现挂载到实例上的方法
May 01 #Javascript
JS html事件冒泡和事件捕获操作示例
May 01 #Javascript
JS实现的贪吃蛇游戏案例详解
May 01 #Javascript
javascript原型链学习记录之继承实现方式分析
May 01 #Javascript
微信小程序实现卡片左右滑动效果的示例代码
May 01 #Javascript
You might like
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
2011/05/18 PHP
PHP中OpenSSL加密问题整理
2017/12/14 PHP
JavaScript中的类继承
2010/11/25 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
2013/10/24 Javascript
JavaScript使用ActiveXObject访问Access和SQL Server数据库
2015/04/02 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
jQuery基于ajax实现星星评论代码
2015/08/07 Javascript
jquery使用ul模拟select实现表单美化的方法
2015/08/18 Javascript
node.js抓取并分析网页内容有无特殊内容的js文件
2015/11/17 Javascript
Knockout自定义绑定创建方法
2015/12/26 Javascript
JQUERY的AJAX请求缓存里的数据问题处理
2016/02/23 Javascript
jQuery Html控件基本操作(日常收集整理)
2016/03/11 Javascript
多种方式实现js图片预览
2016/12/12 Javascript
解析JavaScript实现DDoS攻击原理与保护措施
2016/12/26 Javascript
JS实现图片高斯模糊切换效果的焦点图实例
2017/01/21 Javascript
使用Vue完成一个简单的todolist的方法
2017/12/01 Javascript
小程序分享模块超级详解(推荐)
2019/04/10 Javascript
JavaScript中this的全面解析及常见实例
2019/05/14 Javascript
Python中用sleep()方法操作时间的教程
2015/05/22 Python
举例讲解Python中字典的合并值相加与异或对比
2016/06/04 Python
Python脚本实时处理log文件的方法
2016/11/21 Python
基于python生成器封装的协程类
2019/03/20 Python
django-orm F对象的使用 按照两个字段的和,乘积排序实例
2020/05/18 Python
使用Python构造hive insert语句说明
2020/06/06 Python
在pytorch中动态调整优化器的学习率方式
2020/06/24 Python
Python如何读写二进制数组数据
2020/08/01 Python
使用HTML5 Canvas API控制字体的显示与渲染的方法
2016/03/24 HTML / CSS
武汉世纪畅想数字传播有限公司 .NET笔试题
2015/06/13 面试题
机电专业体育教师求职信
2013/09/21 职场文书
工商管理实习自我鉴定
2013/09/28 职场文书
铁路工务反思材料
2014/02/07 职场文书
校园安全教育广播稿
2014/02/17 职场文书
工程技术负责人岗位职责
2015/04/13 职场文书
士兵突击观后感
2015/06/16 职场文书
小学运动会加油词
2015/07/18 职场文书
Win Server2016远程桌面如何允许多用户同时登录
2022/06/10 Servers