返回

观察者回调的有效利用:你可能还不知道的 Vue 黑科技

前端

尽管 Vue.js 提供了「计算属性」,可在大多数场景中大显身手,然而在某些情境下,「观察者属性」亦可派上用场。与生俱来的特点是,观察者属性的回调函数仅在被监察的属性值发生变动时方可执行,恰如其分。话说到这里,各位朋友一定可以准确理解。假若你运行上述代码,就会发现 dog 的名字是。

前进一步:即刻运行观察者回调

然而,倘若你有心令观察者回调函数在组件创建之初便应声执行,该怎么办?别慌,以下几个妙招可供你参考。

方法一:初始值

考虑以下这段代码:

<script>
export default {
  data() {
    return {
      count: 0
    }
  },
  watch: {
    count(newVal, oldVal) {
      console.log(`新值为${newVal}, 旧值为${oldVal}`)
    }
  },
  created() {
    console.log('组件创建完成')
  }
}
</script>

首先,在组件数据中,我们初始化一个名为 count 的响应式变量,并将其值设为 0。随后,我们在观察者对象中监听 count 变量的变化,并定义一个回调函数,该函数将在 count 变量发生变化时被调用。最后,我们在组件的 created 钩子函数中输出一条信息,表明组件已创建完成。

运行上述代码后,你会发现控制台会输出两次信息:

组件创建完成
新值为0, 旧值为undefined

这是因为,在组件创建过程中,count 变量的值从 undefined 变为 0,因此触发了观察者回调函数的执行。

方法二:立即执行函数

另一种实现方法是使用立即执行函数:

<script>
export default {
  data() {
    return {
      count: 0
    }
  },
  watch: {
    count() {
      console.log(`新值为${this.count}, 旧值为${this.count - 1}`)
    }
  },
  created() {
    this.count++
  }
}
</script>

在这个例子中,我们仍然在组件数据中初始化 count 变量,并将其值设为 0。在观察者对象中,我们定义了一个回调函数,该函数将在 count 变量发生变化时被调用。但是,这一次,我们使用了一个立即执行函数来将 count 变量的值增加 1。这将导致 count 变量的值从 0 变为 1,从而触发观察者回调函数的执行。

运行上述代码后,你会发现控制台会输出一条信息:

新值为1, 旧值为0

这是因为,在组件创建过程中,count 变量的值从 0 变为 1,因此触发了观察者回调函数的执行。

方法三:使用 nextTick

最后,我们还可以使用 Vue.js 的 nextTick 方法来实现这一目的:

<script>
export default {
  data() {
    return {
      count: 0
    }
  },
  watch: {
    count() {
      console.log(`新值为${this.count}, 旧值为${this.count - 1}`)
    }
  },
  created() {
    this.$nextTick(() => {
      this.count++
    })
  }
}
</script>

在这个例子中,我们仍然在组件数据中初始化 count 变量,并将其值设为 0。在观察者对象中,我们定义了一个回调函数,该函数将在 count 变量发生变化时被调用。这一次,我们使用 Vue.js 的 nextTick 方法来将 count 变量的值增加 1。这将导致 count 变量的值在下一个事件循环中从 0 变为 1,从而触发观察者回调函数的执行。

运行上述代码后,你会发现控制台会输出一条信息:

新值为1, 旧值为0

这是因为,在组件创建过程中,count 变量的值在下一个事件循环中从 0 变为 1,因此触发了观察者回调函数的执行。

总结

以上就是三种在 Vue.js 中立即运行观察者回调函数的方法。每种方法都有其优缺点,你可以根据自己的需要选择最合适的方法。