vue-2-计算属性和观察者

Posted 不了无明

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue-2-计算属性和观察者相关的知识,希望对你有一定的参考价值。

<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: {
    reversedMessage: function () {
      return this.message.split(‘‘).reverse().join(‘‘)
    }
  }
})

computed,计算属性是基于它们的依赖进行缓存的,计算属性只有在它的相关依赖发生改变时才会重新求值;

methods , 每当触发重新渲染时,方法的调用方式将总是再次执行函数;

不要滥用watch,但在数据变化响应时执行异步操作或开销较大的操作,这是很有用的。

var vm = new Vue({
  el: #demo,
  data: {
    firstName: Foo,
    lastName: Bar
  },
  computed: {
    fullName: function () {
      return this.firstName +   + this.lastName
    }
  }
})

对比:
var vm = new Vue({
  el: #demo,
  data: {
    firstName: Foo,
    lastName: Bar,
    fullName: Foo Bar
  },
  watch: {
    firstName: function (val) {
      this.fullName = val +   + this.lastName
    },
    lastName: function (val) {
      this.fullName = this.firstName +   + val
    }
  }
})
watch 的适用场景:
<div id="watch-example">
  <p>
    Ask a yes/no question:
    <input v-model="question">
  </p>
  <p>{{ answer }}</p>
</div>

var watchExampleVM = new Vue({
  el: #watch-example,
  data: {
    question: ‘‘,
    answer: I cannot give you an answer until you ask a question!
  },
  watch: {
    // 如果 question 发生改变,这个函数就会运行
    question: function (newQuestion) {
      this.answer = Waiting for you to stop typing...
      this.getAnswer()
    }
  },
  methods: {
    // _.debounce 是一个通过 lodash 限制操作频率的函数。
    // 在这个例子中,我们希望限制访问 yesno.wtf/api 的频率
    // ajax 请求直到用户输入完毕才会发出
    getAnswer: _.debounce(
      function () {
        if (this.question.indexOf(?) === -1) {
          this.answer = Questions usually contain a question mark. ;-)
          return
        }
        this.answer = Thinking...
        var vm = this
        axios.get(https://yesno.wtf/api)
          .then(function (response) {
            vm.answer = _.capitalize(response.data.answer)
          })
          .catch(function (error) {
            vm.answer = Error! Could not reach the API.  + error
          })
      },
      // 这是我们为用户停止输入等待的毫秒数
      500
    )
  }
})

 

gettter与setter:

计算属性默认只有 getter ,也可以提供一个 setter :
//
... 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] } } } // ...

 

以上是关于vue-2-计算属性和观察者的主要内容,如果未能解决你的问题,请参考以下文章

Vue.js系列之四计算属性和观察者

KnockoutJS调用可观察的属性

Swift:计算属性的属性观察者

VUE 中的计算属性和观察者

VueJs,计算属性和观察者之间的区别?

中等难度Vue 面试题+详解答案