码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-09-25 19:52:37      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:ted   请求   each   cat   method   get   用户   场景   could not   

<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-计算属性和观察者

标签:ted   请求   each   cat   method   get   用户   场景   could not   

原文地址:http://www.cnblogs.com/avidya/p/7593492.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!