vue中如何首次赋值不触发watch?

vue组件中watch了某个数据,想在首次赋值改数据的时候,不触发watch,用标记变量,只能用setTimeout延迟修改标记变量,有时操作快时候,标记变量还修改,造成不起作用,各位有何好办法?

阅读 29.3k
3 个回答

题主的意思是不是这样的:

data () {
    return {
        a:null
    }
}

methods: {
    initA () {
        this.a = 1
    },
    changeA () {
        this.a = 2
    },
    aChangeHandler () {
        // do something while a change
    }
}

在initA的时候不触发watch,在changeA的时候触发

如果是这样的话,可以在this.a = 1后,增加this.$watch('a', this.aChangeHandler),这样首次赋值是不会触发aChangeHandler的,只有后面的会触发

详见http://codepen.io/quietcoder/...

watch:{

"aaa":{
     immediate:true,
     handler:function(){
     
     }
}

}

有个immediate 选项

你是不是在等待一个异步(比如ajax)状态给watch的变量赋值?
如果是这样,watch函数提供两个参数,一个是旧值一个是新值,你可以对原来的变量设置一个初始值比如说:null,在检测到时旧值的时候不做处理
不知道这个思路能不能解决你的问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏