返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue不能watch数组和对象变化解决方案
  • 971
分享到

Vue不能watch数组和对象变化解决方案

Vuewatch数组对象变化Vuewatch 2022-11-13 19:11:50 971人浏览 泡泡鱼
摘要

目录Vue 能监听数组的情况Vue 无法监听数组变化举例无法监听数组变化的情况Vue 无法监听数组变化的解决方案Vue 监听对象Vue 设置监听对象Vue 能监听数组的情况 Vue

Vue 能监听数组的情况

Vue 监听数组和对象的变化(vue2.x)

vue 实际上可以监听数组变化,比如:

直接 = 赋值

data () {
  return {
    watchArr: [],
  };
},
watch: {
  watchArr (newVal) {
    console.log('监听:' + newVal);
  }
},
created () {
  setTimeout(() => {
    this.watchArr = [1, 2, 3];
  }, 1000);
},

再如使用 splice(0, 2, 3) 从数组下标 0 删除两个元素,并在下标 0 插入一个元素 3:

data () {
  return {
    watchArr: [1, 2, 3],
  };
},
watch: {
  watchArr (newVal) {
    console.log('监听:' + newVal);
  }
},
created () {
  setTimeout(() => {
    this.watchArr.splice(0, 2, 3);
  }, 1000);
},

push、unshift、pop 数组也能够监听到

Vue 无法监听数组变化

但是,数组在下面两种情况无法监听:

利用索引直接设置一个数组项时,例如:arr[indexOfItem] = newValue;

修改数组的长度时,例如:arr.length = newLength;

举例无法监听数组变化的情况

利用索引直接修改数组值

data () {
  return {
    watchArr: [{
      name: 'krry',
    }],
  };
},
watch: {
  watchArr (newVal) {
    console.log('监听:' + newVal);
  }
},
created () {
  setTimeout(() => {
    this.watchArr[0].name = 'xiaoyue';
  }, 1000);
},

修改数组的长度

长度大于原数组就将后续元素设置为 undefined

长度小于原数组就将多余元素截掉

data () {
  return {
    watchArr: [{
      name: 'krry',
    }],
  };
},
watch: {
  watchArr (newVal) {
    console.log('监听:' + newVal);
  }
},
created () {
  setTimeout(() => {
    this.watchArr.length = 5;
  }, 1000);
},

上面的 watchArr 变成

Vue 无法监听数组变化的解决方案

this.$set(arr, index, newVal);
data () {
  return {
    watchArr: [{
      name: 'krry',
    }],
  };
},
watch: {
  watchArr (newVal) {
    console.log('监听:' + newVal);
  }
},
created () {
  setTimeout(() => {
    this.$set(this.watchArr, 0, {name: 'xiaoyue'});
  }, 1000);
},

使用数组 splice 方法可以监听,例子上面有

使用临时变量直接赋值的方式,原理与直接赋值数组一样

data () {
  return {
    watchArr: [{
      name: 'krry',
    }],
  };
},
watch: {
  watchArr (newVal) {
    console.log('监听:' + newVal);
  }
},
created () {
  setTimeout(() => {
    let temp = [...this.watchArr];
    temp[0] = {
      name: 'xiaoyue',
    };
    this.watchArr = temp;
  }, 1000);
},

Vue 监听对象

Vue 可以监听直接赋值的对象

this.watchObj = {name: 'popo'};

但是 Vue 不能 直接 监听对象属性的添加、修改、删除

Vue 设置监听对象

使用this.$set(object, key, value)、this.$delete(object, key)

使用深度监听 deep: true,只能监听原有属性的变化,不能监听新增、删除的属性

mounted () {
  // 这里使用深度监听 blog 对象的属性变化,会触发 getCatalog 方法
  this.$watch('blog', this.getCatalog, {
    deep: true
    // immediate: true // 是否第一次触发
  });
},

watch: {
  obj: {
    // 这里深度监听变化,直接触发下面方法
    handler(curVal, oldVal) {
      // TODO
    },
    deep: true,
    immediate: true // 是否第一次触发
  }
}

使用this.$set(obj, key, val)来新增属性,this.$delete(object, key)来删除属性

无法使用 this.$set 监听修改原有属性;可以使用深度监听 deep: true,可以直接以 obj.key 的方法来设置原有属性

this.$set(this.watchObj, 'age', 124);
this.$delete(this.watchObj, 'age')

delete this.watchObj[‘name']//(Vue 无法监听 delete 关键字来删除对象属性)

使用 Object.assign 方法,直接赋值的原理监听(最推荐的方法)

this.watchObj = Object.assign({}, this.watchObj, {
  name: 'xiaoyue',
  age: 15,
});

直接 watch obj.key 监听某个值的变化

watch: {
  'obj.name'(curVal, oldVal) {
    // TODO
  }
}

以上就是Vue不能watch数组和对象变化解决方案的详细内容,更多关于Vue watch数组对象变化的资料请关注编程网其它相关文章!

--结束END--

本文标题: Vue不能watch数组和对象变化解决方案

本文链接: https://lsjlt.com/news/170732.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Vue不能watch数组和对象变化解决方案
    目录Vue 能监听数组的情况Vue 无法监听数组变化举例无法监听数组变化的情况Vue 无法监听数组变化的解决方案Vue 监听对象Vue 设置监听对象Vue 能监听数组的情况 Vue ...
    99+
    2022-11-13
    Vue watch数组对象变化 Vue watch
  • 关于Vue不能监听(watch)数组变化的解决方法
    目录一、vue监听数组 二、vue无法监听数组变化的情况 一、vue监听数组 vue实际上可以监听数组变化,比如 data () { return { watchA...
    99+
    2024-04-02
  • Vue Watch方法不能监听到数组或对象值的改变怎么解决
    这篇文章主要介绍了Vue Watch方法不能监听到数组或对象值的改变怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue Watch方法不能监听到数组或对象值的改变怎么解决文章都会有...
    99+
    2023-06-29
  • Vue踩坑之Vue Watch方法不能监听到数组或对象值的改变详解
    目录前言一:利用索引直接改变arr的值 如我在button事件中写的(arr[0]=1000)二:直接修改数组的长度 如this.arr.length=3 总结如下前言 V...
    99+
    2024-04-02
  • vue中watch监听不到变化的解决
    目录watch监听不到对象内部的变化解决方法:watch的handler方法的两个参数值相同解决方法:全部代码watch监听不到对象内部的变化 有的时候vue会出现这种现象,无法监听...
    99+
    2023-01-05
    vue watch监听不到 vue watch监听
  • vue如何检测对象和数组的变化
    这篇文章主要介绍了vue如何检测对象和数组的变化的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue如何检测对象和数组的变化文章都会有所收获,下面我们一起来看看吧。检测对象变化1、不能检测到对象属性的添加或删除...
    99+
    2023-07-04
  • 如何解决Vue不能检测数组或对象变动的问题
    小编给大家分享一下如何解决Vue不能检测数组或对象变动的问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!来看一个实例:<!DOCTYPE html> <htm...
    99+
    2024-04-02
  • vue中watch检测不到对象属性的变化怎么办
    小编给大家分享一下vue中watch检测不到对象属性的变化怎么办,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!正文<template>  <div> &n...
    99+
    2024-04-02
  • 如何解决vue数组中对象属性变化页面不渲染的问题
    这篇文章主要介绍了如何解决vue数组中对象属性变化页面不渲染的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。做checkbox多选功能的...
    99+
    2024-04-02
  • 如何解决vue数组和对象渲染的问题
    这篇文章给大家分享的是有关如何解决vue数组和对象渲染的问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。数组更新检测在 vue 中使用数组的push()、pop()、shift...
    99+
    2024-04-02
  • 对象转数组和数组转对象的类似方法和不同之处?
    对象转数组方法:使用 object.values() 方法返回属性值数组;数组转对象方法:使用 object.fromentries() 方法返回包含数组对的键值对对象。不同之处在于:o...
    99+
    2024-04-30
    数组转对象 对象转数组 键值对
  • pandas groupby分组对象的组内排序解决方案
    问题: 根据数据某列进行分组,选择其中另一列大小top-K的的所在行数据 解析: 求解思路很清晰,即先用groupby对数据进行分组,然后再根据分组后的某一列进行排序,选择排序结果后...
    99+
    2024-04-02
  • Vue中对数组和对象进行遍历和修改方式
    目录对数组和对象进行遍历和修改1、对数组进行循环2、 修改数组的时候,不能直接通过下标去增加修改删除3、对对象进行循环4、增加对象的时候修改数组和对象的特殊情况以及修改方法修改数组的...
    99+
    2024-04-02
  • Vue不能观察到数组length的变化怎么办
    这篇文章主要介绍了Vue不能观察到数组length的变化怎么办,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。由于 JavaScript 的限...
    99+
    2024-04-02
  • react数组变化不更新如何解决
    本文小编为大家详细介绍“react数组变化不更新如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“react数组变化不更新如何解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。react数组变化不更新是因为...
    99+
    2023-07-04
  • 如何解决Vue中数组和对象更改后视图不刷新的问题
    这篇文章主要为大家展示了“如何解决Vue中数组和对象更改后视图不刷新的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决Vue中数组和对象更改后视图不刷...
    99+
    2024-04-02
  • Vue绑定对象与数组变量更改后无法渲染问题解决
    项目场景: 在页面显示上有一个<ul>标签,我们需要动态进行列表数据的展示,而由于我们的页面上除了列表值,还有其他的值要进行展示,因此列表数据的数据结构是某个对象下面的数...
    99+
    2024-04-02
  • vue组件值变化但不刷新问题怎么解决
    本篇内容介绍了“vue组件值变化但不刷新问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!组件值变化但不刷新强制组件刷新在调用组件的...
    99+
    2023-07-02
  • JSON数组和JSON对象在vue中的获取方法
    这两天在学习vue,主要是为了实现前后端的分离,因此数据的传输是必不可少的一个环节。 为了快速入门,参考了vue官网的视频,这个过程由于引入vue.js的问题走了一些弯路,这个我们以...
    99+
    2024-04-02
  • vue父组件数据更新子组件相关内容未改变问题(用watch解决)
    父组件数据更新子组件相关内容未改变 父组件 在父组件中,根据后台给的数据(数组),v-for生成子组件    <div class="exist">           ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作