computed

  • computed计算属性,会对绑定到视图的对象进行处理,监听到变化时,会执行对应的方法
  • 计算属性是基于依赖进行缓存的,只有当依赖发生变化时,才会重新求值。
  • 看一下Vue官网的例子:

    1. <div id="example">
    2. <p>Original message: "{{ message }}"</p>
    3. <p>Computed reversed message: "{{ reversedMessage }}"</p>
    4. </div>
    1. var vm = new Vue({
    2. el: '#example',
    3. data: {
    4. message: 'Hello'
    5. },
    6. computed: {
    7. // 计算属性的 getter
    8. reversedMessage: function () {
    9. // `this` 指向 vm 实例
    10. return this.message.split('').reverse().join('')
    11. }
    12. }
    13. })
  • 声明了一个计算属性 reversedMessage,其后面的函数会作为 vm.reversedMessagegetter

watch

  • watch表示侦听,用来观察响应Vue实例上的数据变动。我们可以在watch中写一些方法,当某些数据变动时,让他们执行。
  • 还是刚才Vue官网那个例子,我们尝试用watch重新写一下:

    1. <div id="example">
    2. <p>Original message: "{{ message }}"</p>
    3. <p>Computed reversed message: "{{ reversedMessage }}"</p>
    4. </div>
    1. var vm = new Vue({
    2. el: '#example',
    3. data() {
    4. return {
    5. message: 'Hello',
    6. }
    7. },
    8. watch: {
    9. message: {
    10. handler: function() {
    11. this.reversedMessage = this.message.split('').reverse().join('')
    12. },
    13. immediate: true
    14. }
    15. }
    16. })
  • 可以明显地感受到watch的写法相对更加复杂一点。不过实现起来也没什么特别的问题。

computed和watch异同

相同点

  • 都是数据之间的依赖关系的一种实现。目的是在一个数据改变时,相应地去对另一个数据进行一些更新或者进行一些其他操作。

    不同点

  • computed主要用于关联数据的处理,即一个数据被修改了,与它相关联的数据也可以进行更新。

  • watch主要用于观测到某个数据变化后执行一系列较为复杂的操作逻辑。
  • 当有一些数据会随着其他数据变动时,优先考虑使用computed,可以防止对于watch的滥用。