vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > vue watch侦听器有无immediate的运行顺序

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

作者:敲完这个我就再也不熬夜了

这篇文章主要介绍了vue watch侦听器有无immediate的运行顺序问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

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时。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文