1.4 计算属性——第1章 Vue起步知识

Vue的HTML模板里,可以用一些简单的运算表达式,放在{{}}里面,但在模板中放入太多的逻辑会让模板过重且难以维护,所以,对于任何复杂逻辑,都应当使用计算属性。注意:computed中的属性不能与data中的属性同名,否则会报错。

    什么是计算属性呢?就是把data里的属性改变一下,就叫计算属性,若便于理解的话,内心里把它叫做“改变属性”,或叫做“变异属性”,所以,计算属性里必须包含data的属性,由data属性变异的。

1.4.1 计算属性的举例说明

计算属性是在computed对象里,代码示例:

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

fullName就是计算属性,由data的属性firstName和lastName合并而产生的,可以通过this.fullName访问。

 

下面的代码,如果不用计算属性,直接在模板里的写表达式,就显得笨重了:

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

如果用计算属性,在模板里直接写这个属性名,把逻辑写到Vue计算属性里,就显得很优雅,也方便代码维护。

<div id="example">
    {{ reversedMessage }}
</
div>

   reversedMessage就是计算属性名,它是一个函数,返回split('').reverse().join(''),如下所示:

<script>
   
var vm = new Vue({
       
el: '#app',
       
data: {
           
message: 'Hello'
       
},
       
computed: {
           
reversedMessage: function () {
                
return this.message.split('').reverse().join('')
            }
        }
    })

</script>

可以像绑定普通 property 一样在模板中绑定计算属性。Vue 知道 vm.reversedMessage 依赖于 vm.message,因此当 vm.message 发生改变时, vm.reversedMessage 会被重新计算,这或者是叫计算属性的缘故吧。

1.4.2 计算属性和侦听属性比较

Vue提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属性。侦听属性也是冲着data的属性来的,不要被新名称吓到,不是新的东西,就当作是偷窥data的属性变化的玩意。

var app = new Vue({
   
el: '#demo',
   
data: {
       
firstName: '',
       
lastName: '',
       
fullName: ' '
   
},
   
watch: {
       
firstName: function (val) {
           
this.fullName = val + ' ' + this.lastName
       
},
       
lastName: function (val) {
           
this.fullName = this.firstName + ' ' + val
       
}
    }
})

侦听(watch)firstName和lastName,当这两个值发生变化时,让fullName也跟着变化,起到作用就是watch。计算属性也可以起到侦听作用,如下代码:

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

计算属性和侦听属性的比较:

(1)计算属性是当属性变化时,返回一个值。

(2)侦听属性是当属性变化时,执行一个操作。

1.4.3 计算属性的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]
        }
    }
}

如果给fullName赋值,可以同时改写firstName和lastName的值。赋值方式:vm.fullName=’张 三’。

----------------------------------------------------------------------------------------------------------------
本内容为《抹平Vue学习曲线》的部分章节,需要阅读完整书籍的,可以跟作者沟通。
----------------------------------------------------------------------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值