由于Class和Style绑定使用频繁,字符串拼接麻烦且易错。因此,Vue.js 做了专门的增强。表达式结果的类型除了字符串之外,还可以是对象或数组。
一、Class
1.对象
(1)对象语法
<style>
.active{
color:blue
}
.line{
text-decoration:underline
}
</style>
<div id="example">
<div v-bind:class="{ active: isActive, line:isLine}">abc</div>
</div>
<script>
var vm = new Vue({
el:'#example',
data: {
isActive: true,
isLine: true
},
})
</script>
isActive,isLine是bool值,用来控制该类是否有此名称
运行
(2)绑定类和非绑定类共存
<div class="active" v-bind:class="{ line:line}">abc</div>
(3)也可以只传一个对象
<div id="example">
<div v-bind:class="classObject">abc</div>
</div>
<script>
var vm = new Vue({
el:'#example',
data: {
classObject: {
active: true,
line: true
}
}
})
</script>
(4)常用模式
<div v-bind:class="classObject"></div>
data: {
isActive: true,
error: null
},
computed: {
classObject: function () {
return {
active: this.isActive && !this.error,
'text-danger': this.error && this.error.type === 'fatal'
}
}
}
2.数组
(1)数组语法
我们可以把一个数组传给 v-bind:class
,以应用一个 class 列表:
<div id="example">
<div v-bind:class="[activeClass,lineClass]">abc</div>
</div>
<script>
var vm = new Vue({
el:'#example',
data: {
activeClass: 'active',
lineClass: 'line'
}
})
</script>
(2)三元表达式
这样写将始终添加 errorClass
,但是只有在 isActive
是 truthy[1] 时才添加 activeClass
<div id="example">
<div v-bind:class="[isActive ? activeClass : '', lineClass]">abc</div>
</div>
<script>
var vm = new Vue({
el:'#example',
data: {
isActive: true,
activeClass: 'active',
lineClass: 'line'
}
})
</script>
或者简写成
<div v-bind:class="[{ active: isActive }, lineClass]">abc</div>
(3)组件上使用
??
二、Style
1.对象
(1)基本语法
<div id="example">
<div v-bind:style="{color:colorStyle, 'fontSize':sizeStyle}">abc</div>
</div>
<script>
var vm = new Vue({
el:'#example',
data: {
colorStyle: 'blue',
sizeStyle: '30px'
}
})
</script>
</body>
或者
<div id="example">
<div v-bind:style="objectStyle">abc</div>
</div>
<script>
var vm = new Vue({
el:'#example',
data: {
objectStyle:{
color: 'blue',
fontSize: '30px'
}
}
})
</script>
2.数组
(1)多个样式
<div id="example">
<div v-bind:style="[objectStyle1, objectStyle2]">abc</div>
</div>
<script>
var vm = new Vue({
el:'#example',
data: {
objectStyle1:{
color: 'blue',
},
objectStyle2:{
fontSize: '30px'
}
}
})
</script>
(2)自动添加前缀
当 v-bind:style
使用需要添加浏览器引擎前缀的 CSS 属性时,如 transform
,Vue.js 会自动侦测并添加相应的前缀
??
(3)多重值
??