Kelichao / vue.js.2.0

针对vue2.0版本,以及关于MVVM框架学习,使用中的总结,附带backbone.js框架的思想与使用方法做使用记录,以及去年学过的backbone相关MVC框架学习总结与demo笔记思想设计模式 20170-01-12
40 stars 6 forks source link

【vue】Class 与 Style 绑定(类名与样式处理) #12

Closed Kelichao closed 7 years ago

Kelichao commented 7 years ago

Class 与 Style 绑定

一、对象语法

<!-- key为类名,isActive如果为true则有active这个类,否则就没有这个类 -->
<div v-bind:class="{ active: isActive }"></div>
data: {
  isActive: true,
  hasError: false
}

或者直接绑定一个对象,也同样是通过true或者false来判断

<div v-bind:class="classObject"></div>
data: {
classObject: {
active: true,
'text-danger': false
}
}

配合计算属性使用

<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',
}
}
}

二、数组语法

<div v-bind:class="[activeClass, errorClass]">
data: {
activeClass: 'active',
errorClass: 'text-danger'
}

三、组件用法

声明组件:

Vue.component('my-component', {
template: '<p class="foo bar">Hi</p>'
})
<!--然后在使用它的时候添加一些 class:-->
<my-component class="baz boo"></my-component>
<!-- 最终渲染结果-->
<p class="foo bar baz boo">Hi</p>

Style绑定内联样式

<div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>
data: {
  activeColor: 'red',
  fontSize: 30
}

直接绑定到一个样式对象通常更好,让模板更清晰:

可以根据字数多少动态设置字体大小

image

<div v-bind:style="styleObject"></div>
data: {
  styleObject: {
    color: 'red',
    fontSize: '13px'
  }
}

数组语法

v-bind:style 的数组语法可以将多个样式对象应用到一个元素上:

而且会自动添加transform等css3样式的前缀

<div v-bind:style="[baseStyles, overridingStyles]">