接着上篇复习
计算属性
例子
<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('')
}
}
})方法
<p>Reversed message: "{{ reversedMessage() }}"</p>methods: {
reversedMessage: function () {
return this.message.split('').reverse().join('')
}
}说白了计算属性存在依赖性(基于他们的依赖进行缓存),只有其依赖更新计算属性才会更新(考虑一下Date.now()是否还会返回当前时间?),
侦听属性
<div id="demo">{{ fullName }}</div>var vm = new Vue({
el: '#demo',
data: {
firstName: 'Foo',
lastName: 'Bar',
fullName: 'Foo Bar'
},
watch: {
firstName: function (val) {
//val 是当前修改过后的firstName值
this.fullName = val + ' ' + this.lastName
},
lastName: function (val) {
this.fullName = this.firstName + ' ' + val
}
}
})给计算属性添加setter
默认下计算属性是没有setter函数的(你可以在控制台试一下,会报错has no 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]
}
}
}对象语法
<div class="static"
v-bind:class="{ active: isActive, 'text-danger': hasError }">
</div>data: {
isActive: true,
hasError: false
}数组语法
<div v-bind:class="[activeClass, errorClass]"></div>data: {
activeClass: 'active',
errorClass: 'text-danger'
}如果你在template模板上添加了class,在子组件上也写了class那么两个class都会渲染
绑定内联样式
对象语法
<div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>data: {
activeColor: 'red',
fontSize: 30
}也可以直接绑定一个对象
<div v-bind:style="styleObject"></div>数组语法
将多个样式绑定到同一元素
<div v-bind:style="styleObject"></div>多重值
从 2.3.0 起你可以为 style 绑定中的属性提供一个包含多个值的数组,常用于提供多个带前缀的值,例如:
|
这样写只会渲染数组中最后一个被浏览器支持的值。在本例中,如果浏览器支持不带浏览器前缀的 flexbox,那么就只会渲染 display: flex。