• VUE 入门基础(4)


    四,计算属性

      基础例子

        <div id=‘example’>
    
          <p>0riginal 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(‘ ’)
    
          }
    
        }
    
      })

      声明了一个计算属性 reversedMessage 。我们提供的函数将用作属性 vm.reversedMessage 的 getter

        console.log(vm.reversedMessage)   // olleH
    
        vm.message = ‘Goodbye’
    
        console.log(vm.reversedMessage) // eybdooG

      计算缓存

      注意到我们可以通过调用表达式中的method来达到同样的效果:

        <p>Reversed message: "{{ reverseMessage() }}"</p>
    
        methods: {
    
          reverseMessage: function (){
    
          return this.message.split(‘ ’).reverse().join(‘ ’)
    
          }
    
        }

      计算属性是基于它的依赖缓存。计算属性只有在它的相关依赖发生改变时才会重新取值。这就意味着只要message 没有发生改变,多次访问 reversedMessage 计算属性会立即返回之前的计算结果,而不必再次执行函数。

      计算属性 watched Property

      Vue提供了一个方法 $watch, 它用于观察vue 实例上的数据变动。

      <div id=‘demo’>{fullName{}}</div>
        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
    
          }
    
        }
    
      })

      计算 setter

      计算属性默认只有getter, 不过在需要时你也可以提供一个setter:

      computed: {
          fullName: {
            get: function () {
            Return this.firstName +””+this.lastName
          },
          set: function (newValue) {
            Var names = newValue.split(‘ ’)
            this.firstName = name[0]
            this.lastName = name[names.length - 1]
          }
        }
      }

      现在在运行 vm.fullName = 'John Doe' 时, setter 会被调用, vm.firstName 和 vm.lastName 也会被对应更新。

      观察watchers

      Vue 提供一个更通用的方法通过watch 选项,来响应数据的变化,当你想要在数据变化响应时,执行异步操作或开销较大的操作。

    <div id="watch-example">
          <p>
              Ask a yes/no question:
    
              <input v-model="question">
    
          </p>
    
          <p>{{ answer }}</p>
      </div>
      <script>
        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请求直到用户输入完毕才会发出
          // 学习更多关于 _.debounce function (and its cousin
          // _.throttle), 参考: https://lodash.com/docs#debounce
          getAnswer: _.debounce(
              function () {
                var vm = this
                if (this.question.indexOf('?') === -1) {
                  vm.answer = 'Questions usually contain a question mark. ;-)'
                  return
              }
            vm.answer = 'Thinking...'
            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
          )
        }
    })
    </script>
  • 相关阅读:
    centos 搭建 sftp 服务器
    apt-get 安装时,提示lock被占用
    Kafka
    设计模式-分类
    SparkSQL – 从0到1认识Catalyst
    Spark分布式计算引擎
    Spark存储管理
    Spart RDD
    硬件工程师的你也不想一辈子画图、调板子吧!!!
    如何理解IPD+CMMI+Scrum一体化研发管理解决方案之Scrum篇
  • 原文地址:https://www.cnblogs.com/nmxs/p/6211336.html
Copyright © 2020-2023  润新知