美文网首页
7. 计算属性和侦听器

7. 计算属性和侦听器

作者: 论宅 | 来源:发表于2019-05-29 18:01 被阅读0次

模板内的表达式过多会导致模板过于繁重,这时候可以采取计算属性。

<div id="example">
  <p>Original message: "{{ message }}"</p>
  <p>Computed reversed message: "{{ reversedMessage }}"</p>
</div>

var vm = new Vue({
  el: '#example',
  data: {
    message: 'Hello'
  },
  computed: {
    // 计算属性的 getter
    reversedMessage: function () {
      // `this` 指向 vm 实例
      return this.message.split('').reverse().join('')
    }
  }
})

计算属性和一般的属性一样引用,看上去是一个方法,带有返回值,它和一般属性写在data中不同,写在【computed中】。
在这里你可以进行复杂的操作,最终返回需要的返回值,让页面变得更加干净,他等同于小程序的wxs。

计算属性的缓存

计算属性会处理data中的一些数据,然后返回处理后的结果,它看上去和专门定义一个方法处理一样,但是其实并不相同,因为它是有缓存的——

如上例中的this.message,只要这个message的值不改变,那么这个属性返回的永远是上一次计算结果的缓存值,大大节省的计算量。

但也就意味着,如果它处理的数据源并不是data中的可以被响应的数据,那么它将永不会更新数据,如:

computed: {
  now: function () {
    return Date.now()
  }
}

因为Date.now()的值的来源并不是data,所以它永远不会更新数据。

计算属性vs侦听属性

看上去和侦听属性(watch)差不多,同样是值的改变会触发,但是watch容易滥用,例如返回给页面的是data中的name和age两个属性,使用watch就必须对两者同时监听,参数越多,侦听的值就越多,而计算属性则不需要,书写一次就足够了。

计算属性的setter

计算属性不仅仅只有getter,也可以设置setter,绑定了model 的计算属性可以反过来改变数据源。

computed: {
  fullName: {
    // getter
    get: function () {
      return this.firstName + ' ' + this.lastName
    },
    // setter
    set: function (newValue) {
      var names = newValue.split(' ')
      this.firstName = names[0]
      this.lastName = names[names.length - 1]
    }
  }
}
// ...

侦听器

当数据变化时,需要执行异步操作或其他情况,可以使用侦听器来检测事件,从而进行下一步流程。

例如,检测到用户输入姓名后,通过watch将姓名ajax到后台,然后判断该用户名是否可用。明显这种情况不能使用计算属性。

相关文章

网友评论

      本文标题:7. 计算属性和侦听器

      本文链接:https://www.haomeiwen.com/subject/irqutctx.html