vue2 provide/inject watch 监控inject中值变化

在Vue 2.x中,使用inject注入的值默认情况下是不能被watch直接监控到的,因为inject提供的值不是响应式的。这是Vue 2.x的设计,与Vue 3.x中的provideinject不同,Vue 3.x中的inject提供的值是响应式的,可以直接被watch监控到。

如果你希望在Vue 2.x中监控inject中的值的变化

使用计算属性或引用类型的响应式数据 :将inject提供的值保存在组件的响应式数据中,然后使用计算属性或watch来监控这个响应式数据的变化。例如:

复制代码
<template>
  <div>
    <p>{{ injectedValue }}</p>
  </div>
</template>

<script>
export default {
  inject: ['injectedValue'],
  data() {
    return {
      // 将 injectedValue 存储在响应式数据中
      valueToWatch: this.injectedValue,
    };
  },
  watch: {
    valueToWatch(newValue, oldValue) {
      console.log('injectedValue 变化:', newValue, oldValue);
      // 在这里可以执行相应的操作
    },
  },
};
</script>

示例二、

父组件:

复制代码
<template>
  <div @click="changeMap"></div>
</template>

<script>
export default {
   provide() {
        return {
            mapLoad: this.mapLoad,
        };
    },
  data(){
        return {
            isLoadMap: false
        }
    },
  methods: {
        mapLoad(){
            return this.isLoadMap
        },
        changeMap(){
           this.isLoadMap = !this.isLoadMap
        }
    },
};
</script>

inject使用的地方

复制代码
<template>
  <div>
  </div>
</template>

<script>
export default {
  inject: ['mapLoad'],
   computed: {
        watchloadmap() {
            return this.mapLoad()
        }
    },
  watch: {
    watchloadmap(newValue, oldValue) {
      console.log('injectedValue 变化:', newValue, oldValue);
      // 在这里可以执行相应的操作
    },
  },
};
</script>

注意事项:

相关推荐
lichenyang45313 小时前
Docker 学习笔记(一):为什么需要镜像、容器和仓库?
前端
kyriewen13 小时前
别再对着 TypeScript 报错发呆了:我把 10 个最常见的红色波浪线翻译成了人话
前端·javascript·typescript
IT_陈寒13 小时前
SpringBoot自动配置的坑,我的API突然就404了
前端·人工智能·后端
free3513 小时前
从 0 实现一个 Tiny JavaScript VM:项目架构拆解
javascript
暴走的小呆14 小时前
Vue 2 中 Object 的变化侦测:从 getter/setter 到 Dep、Watcher、Observer
vue.js
奇奇怪怪的14 小时前
Embedding 模型 10+ 横向评测
前端
陈广亮14 小时前
Monorepo 从 0 到 1 实操指南 2026 版:pnpm catalogs + Turborepo 2.x + changesets 全链路
前端
子兮曰14 小时前
OpenMontage 深度解剖:你的 AI 编程助手,其实是个视频工作室
前端·后端·ai编程
敲代码的鱼14 小时前
PDF 预览与签名批注写回 支持安卓 iOS 鸿蒙 UTS插件
android·前端·ios