vue watch侦听器有无immediate的运行顺序

刚写项目的一个需求中遇到了watch运行顺序的坑,本打算把项目弄完再来看看,结果leader说产品还在改需求(高强度学习开始!!>_>)

watch普通监听属性(无immediate)

在初始化时不会执行watch

  created() {
    this.id = 1;
    console.log(this.id);
    console.log(this.name);
  },
  watch: {
    id: function (val) {
        if (val == 0) {
          this.name = "id等于0";
        } else if (val == 1) {
          this.name = "id等于1";
        }
        console.log(this.name, "这里是watch");
      },
  },

结果:
在这里插入图片描述
这里有个问题是第一次打印name的值为什么是‘初始值’而不是‘id等于1’。解决这个疑问就得谈到js事件处理的执行机制事件循环。在created中id=1触发watch侦听器,侦听器中函数进入事件queue,继续执行created,打印两个log,这里的name为初始值。created执行完后,执行事件queue中的watch侦听器的函数,给name赋值为‘id等于1’

immediate为true

添加immediate,在初始化时也会执行watch回调函数,组件加载立即执行。
要使用immediate需要添加handler属性

created() {
    this.id = 1;
    console.log(this.id);
    console.log(this.name);
  },
  watch: {
    id: {
      handler: function (val) {
        if (val == 0) {
          this.name = "id等于0";
        } else if (val == 1) {
          this.name = "id等于1";
        }
        console.log(this.name, "这里是watch");
      },
      immediate: true,
    },
  },

结果:
在这里插入图片描述
在组件加载完成时,立即执行watch回调函数,即在created前执行。
后面的执行顺序同无immediate时。

总结

学习前端时候觉得我啥都会了,结果前端全是细节。还有很多东西没学到,加油

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值