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 相关文章推荐
jquery 实现的全选和反选
Apr 15 Javascript
js 返回时间戳所对应的具体时间
Jul 20 Javascript
javascript从右边截取指定字符串的三种实现方法
Nov 29 Javascript
jQuery验证插件validate使用方法详解
Sep 13 Javascript
微信小程序表单验证form提交错误提示效果
Jun 19 Javascript
Vue 实现拖动滑块验证功能(只有css+js没有后台验证步骤)
Aug 24 Javascript
对angularjs框架下controller间的传值方法详解
Oct 08 Javascript
react组件从搭建脚手架到在npm发布的步骤实现
Jan 09 Javascript
微信小程序实现文件、图片上传功能
Aug 18 Javascript
Vue动态修改网页标题的方法及遇到问题
Jun 09 Javascript
加速vue组件渲染之性能优化
Apr 09 Javascript
详解ES6新增字符串扩张方法includes()、startsWith()、endsWith()
May 12 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
py文件转exe时包含paramiko模块出错解决方法
2016/08/12 PHP
php获取开始与结束日期之间所有日期的方法
2016/11/29 PHP
PHP7中I/O模型内核剖析详解
2019/04/14 PHP
PHP实现获取url地址中顶级域名的方法示例
2019/06/05 PHP
JScript中的&quot;this&quot;关键字使用方式补充材料
2007/03/08 Javascript
Javascript 继承实现例子
2009/08/12 Javascript
window.onbeforeunload方法在IE下无法正常工作的解决办法
2010/01/23 Javascript
javascript 基础篇3 类,回调函数,内置对象,事件处理
2012/03/14 Javascript
自动最大化窗口的Javascript代码
2013/05/22 Javascript
dreamweaver 8实现Jquery自动提示
2014/12/04 Javascript
window.location.reload 刷新使用分析(去对话框)
2015/11/11 Javascript
使用jQuery mobile库检测url绝对地址和相对地址的方法
2015/12/04 Javascript
JS使用单链表统计英语单词出现次数
2016/06/16 Javascript
JS清除字符串中重复值的实现方法
2016/08/03 Javascript
使用JavaScript解析URL的方法示例
2019/03/01 Javascript
3分钟读懂移动端rem使用方法(推荐)
2019/05/06 Javascript
在vue项目中使用sass语法问题
2019/07/18 Javascript
微信小程序事件流原理解析
2019/11/27 Javascript
jQuery 实现DOM元素拖拽交换位置的实例代码
2020/07/14 jQuery
[03:20]2015国际邀请赛全明星表演赛
2015/08/08 DOTA
Python的IDEL增加清屏功能实例
2017/06/19 Python
详解pyenv下使用python matplotlib模块的问题解决
2018/11/29 Python
python自定义函数实现一个数的三次方计算方法
2019/01/20 Python
python实现定时压缩指定文件夹发送邮件
2020/12/22 Python
python 实现查找文件并输出满足某一条件的数据项方法
2019/06/12 Python
Python任意字符串转16, 32, 64进制的方法
2019/06/12 Python
python取余运算符知识点详解
2019/06/27 Python
python通过robert、sobel、Laplace算子实现图像边缘提取详解
2019/08/21 Python
如何理解Python中包的引入
2020/05/29 Python
韩国家庭购物网上商店:Nsmall
2017/05/07 全球购物
人事专员岗位职责
2013/11/20 职场文书
信息管理应届生求职信
2014/03/07 职场文书
2014年师德承诺书
2014/05/23 职场文书
MySQL单表千万级数据处理的思路分享
2021/06/05 MySQL
20180830晚上第一届KSL半决赛 雨神vs解冻(二龙 三炮解说)
2022/04/01 星际争霸
R9700摩机记
2022/04/05 无线电