iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue中watch监听不到变化的解决
  • 234
分享到

vue中watch监听不到变化的解决

vuewatch监听不到vuewatch监听 2023-01-05 09:01:26 234人浏览 薄情痞子
摘要

目录watch监听不到对象内部的变化解决方法:watch的handler方法的两个参数值相同解决方法:全部代码watch监听不到对象内部的变化 有的时候Vue会出现这种现象,无法监听

watch监听不到对象内部的变化

有的时候Vue会出现这种现象,无法监听到复杂对象内部的变化:当对象里面原本有某一个属性,并对这个属性操作时,watch是可以监听到当前属性的变化的。但是,若对象里面本没有这个属性的时候,在操作时将属性添加进去,同时包括之后对这个属性的操作,watch是都检测不到的。
这是因为vue的watch会在初始化的时候通过object.defineProperty给对象的每一个属性都添加watcher来监听内部的变化。所以,后期添加上去的属性是无法检测到的。

解决方法:

如果想在初始化后添加一个属性并进行监听操作,可以使用$set:

// this.$set(object, key, value)
// 使用this.$set就可以监听到
this.$set(this.obj, 'a', Math.random())

watch的handler方法的两个参数值相同

一个数据,如果值发生了变化,如果想要记录变化前和变化后的两个值,可以使用handler方法,第一个参数为变化后的新值,第二个为变化前的旧值。
但是如果这个值是复杂对象,如果想记录里面的属性的变化,使用handler,两个参数均为变化后的新值。

解决方法:

结合计算属性、序列化、反序列化生成新的对象,来避免此问题

 data () {
    return {
      obj: {}
    }
  },
  computed: {
    // 如果想要得到差异内容,可以结合计算属性、序列化、反序列化生成新的对象,来避免此问题 。
    obj2 () {
      return JSON.parse(jsON.stringify(this.obj))
    }
  },
  watch: {
    obj2: {
      handler (newVal, oldVal) {
        console.log('data变化了')
        console.log(newVal, oldVal)
      },
      deep: true
    }
  },

全部代码

<template>
  <div>
    <button @click="clickFn">++++</button>
  </div>
</template>

<script>
export default {
  name: 'Mall',
  data () {
    return {
      // !监听时给每一个属性都添加getter和setter,变化了,就触发handler函数,如果后期添加属性,这个属性不可以被监听到
      // obj: {
      //   a: 10
      // }

      // !这种是不可以被监听到的
      // 因为watch是通过Object.defineProperty()给对象的每一个现有属性增加监听器
      // 在后面直接添加a属性,身上没有监听器,所以不会被监听到
      obj: {}
    }
  },
  computed: {
    // 如果想要得到差异内容,可以结合计算属性、序列化、反序列化生成新的对象,来避免此问题 。
    obj2 () {
      return JSON.parse(JSON.stringify(this.obj))
    }
  },
  watch: {
    obj2: {
      handler (newVal, oldVal) {
        console.log('data变化了')
        console.log(newVal, oldVal)
      },
      deep: true
    }
  },
  methods: {
    clickFn () {
      // this.obj.a = Math.random()

      // this.$set(object, key, value)
      // 使用this.$set就可以监听到
      this.$set(this.obj, 'a', Math.random())
    }
  }
}
</script>

到此这篇关于vue中watch监听不到变化的解决的文章就介绍到这了,更多相关vue watch监听不到内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: vue中watch监听不到变化的解决

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue中watch监听不到变化的解决
    目录watch监听不到对象内部的变化解决方法:watch的handler方法的两个参数值相同解决方法:全部代码watch监听不到对象内部的变化 有的时候vue会出现这种现象,无法监听...
    99+
    2023-01-05
    vue watch监听不到 vue watch监听
  • 关于Vue不能监听(watch)数组变化的解决方法
    目录一、vue监听数组 二、vue无法监听数组变化的情况 一、vue监听数组 vue实际上可以监听数组变化,比如 data () { return { watchA...
    99+
    2024-04-02
  • vue如何用watch监听数据变化
    这篇文章主要介绍“vue如何用watch监听数据变化”,在日常操作中,相信很多人在vue如何用watch监听数据变化问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue如何用watch监听数据变化”的疑惑有所...
    99+
    2023-07-04
  • vue中怎么利用watch监听数据变化
    vue中怎么利用watch监听数据变化,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、watch使用的几种方法(1)通过watch监听dat...
    99+
    2024-04-02
  • Vue Watch方法不能监听到数组或对象值的改变怎么解决
    这篇文章主要介绍了Vue Watch方法不能监听到数组或对象值的改变怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue Watch方法不能监听到数组或对象值的改变怎么解决文章都会有...
    99+
    2023-06-29
  • vue中watch如何监听对象及对应值的变化
    这篇文章主要为大家展示了“vue中watch如何监听对象及对应值的变化”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue中watch如何监听对象及对应值的变化...
    99+
    2024-04-02
  • vue项目中的数据变化被watch监听并处理
    目录vue数据变化被watch监听处理监听当前vue文件数据监听vuex中的数据如何正确使用watch监听属性变化基本用法监听object初始化变量触发监听回调vue数据变化被wat...
    99+
    2024-04-02
  • vue中watch监听器的触发时机(watch的坑及解决)
    目录watch监听器的触发时机起因代码watch控制台说明vue watch的理解小记watch监听器的触发时机 起因 我需要在页面created时获得商家的类型id值,然后监听id...
    99+
    2024-04-02
  • vue如何使用watch监听指定数据的变化
    目录使用watch监听指定数据的变化vue watch监听多个值使用watch监听指定数据的变化  在vue中,可以使用watch属性来监听data中某个属性值的变化。 &...
    99+
    2024-04-02
  • Vue watch中监听值的变化,判断后修改值方式
    目录watch监听值的变化,判断后修改值watch监听data函数中数据改变的三种方式1.常用型(浅层监听)2.深层监听(利用deep属性)3.深层监听某一个特定属性(用字符串表示对...
    99+
    2024-04-02
  • vue正确使用watch监听属性变化方式
    目录基本用法监听object使用deep参数重新赋值通过路径监听内部数据初始化变量触发监听回调总结Vue中可以使用监听器监听属性的变化,并根据属性变化作出响应。但一旦涉及到复杂数据的...
    99+
    2024-04-02
  • vue前端测试开发watch监听data的数据变化
    目录watch监听data的数据变化新问题解决1. 先把姓名的值,也加到options里2. 在监听里增加for循环和判断watch监听data的数据变化 上一篇里提到了用eleme...
    99+
    2024-04-02
  • Vue踩坑之Vue Watch方法不能监听到数组或对象值的改变详解
    目录前言一:利用索引直接改变arr的值 如我在button事件中写的(arr[0]=1000)二:直接修改数组的长度 如this.arr.length=3 总结如下前言 V...
    99+
    2024-04-02
  • Vue中watch监听第一次不触发、深度监听问题
    目录watch监听第一次不触发、深度监听第一次不触发例如vue watch使用无效问题watch监听第一次不触发、深度监听 第一次不触发 handler:其值是一个回调函数。即监听到...
    99+
    2022-11-13
    Vue watch监听 watch监听不触发 Vue深度监听
  • vue监听路由变化时watch方法会执行多次的原因及解决
    目录需求描述: 需求解析: 解决需求 问题解决 本人前端菜鸟一名,一直致力于不间断的生产管理后台的bug,并以此自勉自励。近几天接到一个需求,网上也搜了很多例子,但是没有从根本上解决...
    99+
    2024-04-02
  • vue中watch和computed能监听到数据改变的原因是什么
    这篇文章主要为大家展示了“vue中watch和computed能监听到数据改变的原因是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue中watch和co...
    99+
    2024-04-02
  • Vue中的 watch监听属性详情
    目录一.watch监听一般数据的变化(数值,字符串,布尔值)1.数值2.字符串3.布尔值二.watch 监听 复杂类型数据的变化1.对象2.数组3.对象数组4.对象数组的属性首先要确...
    99+
    2024-04-02
  • vue组件props属性监听不到值变化问题
    目录props属性监听不到值变化问题props监听变化的几种方式应用场景1.computed 计算属性2.methods 方法3.watch 侦听器props属性监听不到值变化问题 ...
    99+
    2024-04-02
  • 使用watch监听对象里面值的变化
    目录watch监听对象里面值的变化1.样式代码2.data里的代码3.watch监听watch如何深度监听对象变化深度监听总结watch监听对象里面值的变化 后台管理有时候有选择选择...
    99+
    2023-01-14
    watch监听对象 watch监听 watch监听对象值变化
  • vue中watch的立即监听和深度监听是什么
    小编给大家分享一下vue中watch的立即监听和深度监听是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!watch 的立即监...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作