You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue.js 2中如何让watch监听不触发初始接口数据赋值的变更

解决方案1:添加初始化状态标志位(最通用,无场景限制)

在data中新增一个标记位记录初始加载是否完成,只有初始加载完成后才执行watch的后续逻辑:

import axios from "axios";

export default {
  name: 'Settings',
  data: () => ({
    motionSensor: null,
    // 新增初始化标记,默认未完成
    isInitFinished: false
  }),
  mounted() {
    axios
      .get('http://localhost:8000/status.json')
      .then(response => {
        this.motionSensor = response.data['motionsensor'] ? "1" : "0";
        // 初始赋值完成后再把标记设为true
        this.isInitFinished = true;
      })
  },
  watch: {
    motionSensor: function(val) {
      // 初始未完成时直接返回,不执行后续逻辑
      if (!this.isInitFinished) return
      alert('Motion sensor value is now: ' + val)
    }
  }
}

解决方案2:请求完成后手动挂载监听器(代码更简洁,无冗余标记)

不在组件初始化时就声明watch,而是等初始数据赋值完成后,再调用Vue实例的$watch方法手动注册监听:

import axios from "axios";

export default {
  name: 'Settings',
  data: () => ({
    motionSensor: null
  }),
  mounted() {
    axios
      .get('http://localhost:8000/status.json')
      .then(response => {
        this.motionSensor = response.data['motionsensor'] ? "1" : "0";
        // 初始赋值完成后再注册监听器,自然不会触发初始赋值的回调
        this.$watch('motionSensor', function(val) {
          alert('Motion sensor value is now: ' + val)
        })
      })
  }
}

解决方案3:通过watch旧值判断(适用不会把变量重置为初始值null的场景)

watch回调默认接收两个参数:新值、旧值,初始赋值时旧值为你设置的初始值null,判断旧值为null时直接跳过即可:

import axios from "axios";

export default {
  name: 'Settings',
  data: () => ({
    motionSensor: null
  }),
  mounted() {
    axios
      .get('http://localhost:8000/status.json')
      .then(response => {
        this.motionSensor = response.data['motionsensor'] ? "1" : "0";
      })
  },
  watch: {
    // 第二个参数为旧值
    motionSensor: function(val, oldVal) {
      // 初始赋值时旧值为null,直接跳过
      if (oldVal === null) return
      alert('Motion sensor value is now: ' + val)
    }
  }
}

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 22:24:07