class和style都可以是模版的属性,它们都可以通过v-bind动态的绑定到模版中:
<div :class="className">这是class</div><div :style="styleObj">这是style</div>
Vue对v-bind的class和style进行了特殊的封装,形式比较多,主要是对象和数组的绑定方式。
class
1、class属性绑定为一个对象
const app = {template:`<div :class="{ active: isActive }"></div>`,// 渲染为 <div class="active"></div>data(){return {isActive: true}}}
active类名是否生效,取决于数据属性isActive 的真假值。
或者直接绑定为一个对象:
const app = {template:`<div :class="{ active: isActive, 'text-danger': true }"></div>`,// 渲染为 <div class="active text-danger"></div>data(){return {isActive: true}}}
2、class属性绑定为一个数组
const app = {template:`<div :class="[activeClass, errorClass]"></div>`,// 渲染为 <div class="active error"></div>data(){return {activeClass: 'active',errorClass: 'error'}}}
或者在数组中使用三元运算符有条件的渲染某个值:
const app = {template:`<div :class="[isActive ? activeClass : '', errorClass]"></div>`,// 渲染为 <div class="error"></div>data(){return {isActive: false,activeClass: 'active',errorClass: 'error'}}}
3、class属性也可以直接给组件进行绑定
const myComponent = {template: `<p class="foo bar">Hi!</p>`// 渲染为 <p class="baz boo foo bar">Hi!</p>}const app = {template: `<myComponent class="baz boo" />`,components:{myComponent}}
class属性同样可以进行绑定:
const myComponent = {template: `<p class="foo bar">Hi!</p>`// 渲染为 <p class="active foo bar">Hi!</p>}const app = {template: `<myComponent :class="{ active: isActive }" />`,components:{myComponent},data(){return{isActive: true}}}
如果你的组件有多个根元素,你将需要指定哪个根元素来接收这个**class**。你可以通过组件的**$attrs**属性来实现指定:
const myComponent = {template: `<p :class="$attrs.class">Hi!</p><span>This is a child component</span>`// 渲染为// <p class="baz">Hi!</p>// <span>This is a child component</span>}const app = {template: `<myComponent class="baz" />`,components:{myComponent},data(){return{isActive: true}}}
style
1、style属性支持绑定为一个对象
const app = {template: `<div :style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>`,// 渲染结果 <div style="color: red; font-size: 30px }"></div>data(){return{color: 'red',fontSize: 30}}}
style对象内的属性可以使用小驼峰的形式进行书写:
const app = {template: `<div :style="{ color: activeColor, 'font-size': fontSize + 'px' }"></div>`,// 渲染结果 <div style="color: red; font-size: 30px }"></div>data(){return{color: 'red',fontSize: 30}}}
2、style属性绑定为一个数组
const app = {template: `<div :style="[baseStyles, overridingStyles]"></div>`,// 渲染结果 <div style="color: red; font-size: 30px }"></div>data(){return{baseStyles: {color: 'red'},overridingStyles: {fontSize: 30}}}}
3、style属性可以指定浏览器前缀
const app = {template: `<div :style="{ display: ['-webkit-box', '-ms-flexbox', 'flex'] }"></div>`}
数组仅会渲染浏览器支持的最后一个值。在这个示例中,在支持不需要特别前缀的浏览器中都会渲染为 display: flex。
