VUE 样式绑定
操作元素的 class 列表和内联样式是数据绑定的一个常见需求。因为它们都是属性,所以我们可以用 v-bind 处理它们:只需要通过表达式计算出字符串结果即可。不过,字符串拼接麻烦且易错。因此,在将 v-bind 用于 class 和 style 时,Vue.js 做了专门的增强。表达式结果的类型除了字符串之外,还可以是对象或数组。
绑定 HTML Class
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello Vue</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<style>
.active {background-color: #0F0;}
</style>
</head>
<body>
<div id="app">
<span v-bind:class="{ active: isActive }">Hello VUE Class</span>
</div>
<script>
var obj = {
isActive:true,
foo: '<font color="red">Hello Html Fragment</font>'
}
var vm = new Vue({
el: '#app',
data: obj
})
</script>
</body>
</html>
使用对象绑定样式
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello Vue</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<style>
.active {background-color: #0F0;}
.text-danger {color: #F00;}
</style>
</head>
<body>
<div id="app">
<span v-bind:class="classObject">Hello VUE Class</span>
</div>
<script>
var obj = {
classObject: {
active: true,
'text-danger': true
},
foo: '<font color="red">Hello Html Fragment</font>'
}
var vm = new Vue({
el: '#app',
data: obj
})
</script>
</body>
</html>
数组语法
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello Vue</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<style>
.active {background-color: #0F0;}
.text-danger {color: #F00;}
</style>
</head>
<body>
<div id="app">
<span v-bind:class="[activeClass, errorClass]">Hello VUE Class</span>
</div>
<script>
var obj = {
activeClass:'active',
errorClass:'text-danger',
foo: '<font color="red">Hello Html Fragment</font>'
}
var vm = new Vue({
el: '#app',
data: obj
})
</script>
</body>
</html>
用在组件上
当在一个自定义组件上使用 class 属性时,这些类将被添加到该组件的根元素上面。这个元素上已经存在的类不会被覆盖。
例如,如果你声明了这个组件:
Vue.component('my-component', {
template: '<p class="foo bar">Hi</p>'
})
然后在使用它的时候添加一些 class:
<my-component class="baz boo"></my-component>
HTML 将被渲染为:
<p class="foo bar baz boo">Hi</p>
对于带数据绑定 class 也同样适用:
<my-component v-bind:class="{ active: isActive }"></my-component>
当 isActive 为 truthy[1] 时,HTML 将被渲染成为:
<p class="foo bar active">Hi</p>
绑定内联样式
对象语法
v-bind:style 的对象语法十分直观——看着非常像 CSS,但其实是一个 JavaScript 对象。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello Vue</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
<span v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }">Hello VUE Class</span>
</div>
<script>
var obj = {
activeColor:'red',
fontSize:'12',
foo: '<font color="red">Hello Html Fragment</font>'
}
var vm = new Vue({
el: '#app',
data: obj
})
</script>
</body>
</html>