Class与Style绑定
对于数据绑定,一个常见的需求是操作元素的class列表和它的内联样式。因为它们都是attribute,我们可以用v-bind处理它们:只需要计算出表达式最终的字符串。不过,字符串拼接麻烦又易错。因此,在v-bind用于class和style时,Vue.js专门增强了它。表达式的结果类型除了字符串以外,还可以是对象或数组。
一、绑定HTML Class
1.对象语法
我们可以传给v-bind:class一个对象,以动态地切换class。注意,v-bind:class指令可以与普通的class特性共存。代码示例如下:
<div id="example" class="static" v-bind:class="{'didi-orange':isRipe,'didi-green':isNotRipe}"></div>
var vm = new Vue({
el:'example',
data:{
isRipe:true,
isNotRipe:false
}
})
渲染为:
<div id='example' class='static didi-orange'></div>
当isRipe和isNotRipe变化时,class列表将相应地更新。例如,如果isNotRipe变为true,那么class列表将变为”static didi-orange didi-green”。(当然,一般情况下,v-bind:class绑定的对象中只有一个class会生效,这取决于用户自己的设置。)
注:尽管可以用Mustache标签绑定class,比如class=”{ {className}}“,但是我们不推荐这种写法和v-bind:class混用。
我们也可以直接绑定数据中的一个对象,代码示例如下:
<div id="example" v-bind:class="ddfe"></div>
var vm = new Vue({
el:'example',
data:{
ddfe:{
'didi-orange':'true',
'didi-green':'false'
}
}
})
还可以在这里绑定一个返回对象的计算属性。这是一种常用且强大的模式。代码示例如下:
<div id='example' v-bind:class="ddfe"></div>
var vm = new Vue({
el:'example',
data:{
didiAge:4,
didiMember:6000
}
computed:{
ddfe:function(){
return{
'didi-orange':this.didiAge>3 ? true:false,
'didi-large':this,didiMember>1000? true:false
}
}
}
})
2.数组语法
我们可以把一个数组传给v-bind:class,以应用一个class列表。代码示例如下:
<div id='example' v-bind:class="[didiHandsome,didiBeautiful]"></div>
var vm = new Vue({
el:'example',
data:{
didiHandsome:'didi-handsome',
didiBeautiful:'didi-beautiful'
}
})
渲染为:
<div id="example" class="didi-handsome didi-beautiful"></div>
如何想根据条件切换列表中的class,则可以用三元表达式。代码示例如下:
<div id="example" v-bind:class="[didiHandsome,isRipe ? didiOrange: '']"></div>
此例始终添加didiHandsome,但是只有在isRipe为true时才会添加didiOrange。
不过,当有多个条件class时这样写有些烦琐。在Vue.js 1.0.19及以后版本中,可以在数组语法中使用对象语法。代码示例如下:
<div id="example" v-bind:class="[didiHandsome,{didiOrange: isRipe,didiGreen: isNotRipe}]"></div>
二、绑定内联样式
1.对象语法
v-bind:style的对象语法十分直观——看着非常像CSS,其实它是一个JavaScript对象。CSS属性名可以用驼峰式或短横分隔命名。代码示例如下:
<div id="example" v-bind:style="{color:didiColor,fontSize:fontSize + 'px'}"></div>
var vm = new Vue({
el:'example',
data:{
didiColor:'orange',
fontSize:30
}
})
通常直接绑定到一个样式对象更好,让模板更清晰。代码示例如下:
<div id="example" v-bind:style="ddfe"></div>
var vm = new Vue({
el:'example',
data:{
ddfe:{
color:orange,
fontSize:'13px'
}
}
})
同样的,对象语法常常结合返回对象的计算属性使用。
2.数组语法
v-bind:style的数组语法可以将多个样式对象应用到一个元素上。代码示例如下:
<div v-bind:style="[ddfe,didiFamily]"></div>
3.自动添加前缀
当v-bind:style使用需要厂商前缀的CSS属性时,如transform,Vue.js会自动侦测并添加相应的前缀。在Vue.js源码中采用prefix函数来完成这个功能。
转载于//www.cnblogs.com/yc-1314/p/10266776.html
还没有评论,来说两句吧...