Vue.js——计算属性

作者: 每木传情 | 来源:发表于2017-10-24 16:35 被阅读0次

计算属性

<div id="example">
  {{ message.split('').reverse().join('') }}
</div>

由上面的代码可以看出,双大括号里面的文本操作比较多,而且这样的形式可能会造成代码的冗余和繁复,所以vue提供了一个属性来操作这些复杂的逻辑。
我们先来看一个基本的例子:

<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('')
    }
  }
})

这里声明了一个计算属性reversedMessage,Vue 知道 vm.reversedMessage 依赖于 vm.message,因此当 vm.message 发生改变时,所有依赖 vm.reversedMessage 的绑定也会更新。

计算属性与方法的比较

methods: {
  reversedMessage: function () {
    return this.message.split('').reverse().join('')
  }
}

你可以看出上面的方法结果与计算属性的结果一致,但是两者也有区别,计算属性是基于它们的依赖进行缓存的,就是说只要 message 还没有发生改变,多次访问 reversedMessage 计算属性会立即返回之前的计算结果,而不必再次执行函数。
而每当触发重新渲染时,调用方法将总会再次执行函数。

计算属性和watch(侦听属性)的比较

首先我们来看一个例子:

<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
    }
  }
})

其实我最先看到这个东西的时候真的不知道这个是个什么玩意儿,后来我尝试着用vm.firstName="444"改动了data里面的firstname,然后刷新页面发现了变化。本来fullNmae是'Foo Bar',我只是改动了firstName的值,所以watch的功能是监听数据的变化,当我改变firstName时,watch里面的firstNmae后面的函数执行。
但是上面的代码造成了很多重复,这时我们应该用计算属性。

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

setter和getter

计算属性可以有setter和getter

var vm = new Vue({
    el: '#demo',
    data: {
       firstName: 'Foo',
       lastName: 'Bar'
     },
     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]
         }
     }
    }
});
vm.fullName = 'John Doe';

上面代码的最后一句就会触发setter,使得vm.firstName='John ',vm.lastName='Doe'。

相关文章

  • vue.js学习笔记二

    Vue.js 计算属性 计算属性关键词: computed。 计算属性在处理一些复杂逻辑时是很有用的。 可以看下以...

  • vue.js 框架

    vue.js 中文网 vue框架 vue是一个 mvvm 框架 node下载vue.js命令 vue属性 计算属性...

  • 《Vue.js 实战》基础篇(上)

    本章内容:认识 Vue.js、数据绑定、计算属性、内置指令 一、初始 Vue.js 1.1 Vue.js 是什么 ...

  • vuejs—计算属性

    上篇文章 介绍了vue.js的基础语法,这篇文章我们将一起学习vue.js的计算属性。什么是计算属性,为什么要用这...

  • Vue.js——计算属性

    计算属性 由上面的代码可以看出,双大括号里面的文本操作比较多,而且这样的形式可能会造成代码的冗余和繁复,所以vue...

  • vue.js 计算属性

    在模板中绑定表达式是非常便利的,但是它们实际上只用于简单的操作。在模板中放入太多的逻辑会让模板过重且难以维护。例如...

  • Vue.js 计算属性

    计算属性关键词: computed。 计算属性在处理一些复杂逻辑时是很有用的。 可以看下以下反转字符串的例子: 实...

  • Vue.js 计算属性

    计算属性 如果模板中的表达式过长,或逻辑复杂时,代码会变得臃肿甚至难以阅读和维护,此时应该使用计算属性。 所有的计...

  • Vue.js 计算属性

    1.含义及用法 在html模版中绑定数据时,如果需要的数据不是简单的data中的数据,而是需要将一个或者多个数据计...

  • Vue.js 计算属性

    计算属性关键词:computed计算属性在处理一些复杂逻辑时是很有用的。可以看下一下反转字符串的例子:实例1 实例...

网友评论

    本文标题:Vue.js——计算属性

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