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 相关文章推荐
Javascript 布尔型分析
Dec 22 Javascript
JavaScript 开发规范要求(图文并茂)
Jun 11 Javascript
javascript的document.referrer浏览器支持、失效情况总结
Jul 18 Javascript
alert出数组中的随即值代码
Sep 25 Javascript
jQuery中first()方法用法实例
Jan 06 Javascript
深入理解JavaScript中的对象
Jun 04 Javascript
Web前端开发之水印、图片验证码
Nov 27 Javascript
Angular2搜索和重置按钮过场动画
May 24 Javascript
超出JavaScript安全整数限制的数字计算BigInt详解
Jun 24 Javascript
详解使用VueJS开发项目中的兼容问题
Aug 02 Javascript
layer实现弹出层自动调节位置
Sep 05 Javascript
js this 绑定机制深入详解
Apr 30 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
Yii实现文章列表置顶功能示例
2016/10/18 PHP
PHP递归实现汉诺塔问题的方法示例
2017/11/25 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
js 小贴士一星期合集
2010/04/07 Javascript
js iframe跨域访问(同主域/非同主域)分别深入介绍
2013/01/24 Javascript
js获取select默认选中的Option并不是当前选中值
2014/05/07 Javascript
浅析webapp框架AngularUI的demo
2014/12/21 Javascript
js实现iframe自动自适应高度的方法
2015/02/17 Javascript
JavaScript获取服务器端时间的方法
2016/11/29 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(同步显示图像位置信息)
2016/12/02 Javascript
微信小程序之MaterialDesign--input组件详解
2017/02/15 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
2017/04/05 Javascript
使用3D引擎threeJS实现星空粒子移动效果
2020/09/13 Javascript
JS实现简易换图时钟功能分析
2018/01/04 Javascript
nodejs+mongodb aggregate级联查询操作示例
2018/03/17 NodeJs
在vue2.0中引用element-ui组件库的方法
2018/06/21 Javascript
vue.js实现插入数值与表达式的方法分析
2018/07/06 Javascript
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
angularJs select绑定的model取不到值的解决方法
2018/10/08 Javascript
vue 详情跳转至列表页实现列表页缓存
2019/03/27 Javascript
详解Vue3.0 前的 TypeScript 最佳入门实践
2019/06/18 Javascript
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
2019/08/17 Javascript
基于javascript原生判断DOM是否加载完毕
2020/10/14 Javascript
vue实现表格合并功能
2020/12/01 Vue.js
python里对list中的整数求平均并排序
2014/09/12 Python
python2.7+selenium2实现淘宝滑块自动认证功能
2018/02/24 Python
Python对象属性自动更新操作示例
2018/06/15 Python
css3media响应式布局实例
2016/07/08 HTML / CSS
严选全球尖货,立足香港:Bonpont宝盆
2018/07/24 全球购物
SOA面试题:如何在SOA中实现松耦合
2013/07/21 面试题
简历中求职的个人自我评价
2013/12/03 职场文书
工厂搬迁方案
2014/05/11 职场文书
社区四风存在问题及整改措施
2014/10/26 职场文书
五好文明家庭事迹材料
2014/12/20 职场文书
致地震灾区的慰问信
2015/03/23 职场文书
Python如何使用循环结构和分支结构
2022/04/13 Python