vue 绑定class、v-bind:style(对象语法、数组语法)
绑定 HTML Class
我们可以传给 v-bind:class 一个对象,以动态地切换 class:
内联样式在模板里
1 <div id="div1" :class="{active: isActive, 'text-danger': hasError}"></div>
2 <script type="text/javascript">
3 var vm1 = new Vue({
4 el: "#div1",
5 data: {
6 isActive: true,
7 hasError: true,
8 }
9 })
10 </script>
11
12
13
14 // 预览
15 <div id="div1" class="active text-danger"></div>
内联样式不在模板里
1 <div id="div2" :class="class_obj"></div>
2
3 <script type="text/javascript">
4 var vm2 = new Vue({
5 el: "#div2",
6 data: {
7 class_obj: {
8 isActive: true,
9 hasError: true,
10 }
11 }
12 })
13 </script>
14 ————————————————
15 // 预览
16 <div id="div2" class="isActive hasError"></div>
绑定返回对象的计算属性
1 <div id="div3" v-bind:class="classObject"></div>
2
3 <script type="text/javascript">
4 var vm3 = new Vue({
5 el: "#div3",
6 data: {
7 isActive: true,
8 error: true
9 },
10 computed: {
11 classObject: function () {
12 return {
13 active: this.isActive && this.error,
14 'text-danger': this.error
15 }
16 }
17 }
18 })
19 </script>
20 ————————————————
21
22 // 预览
23
24 <div id="div3" class="active text-danger"></div>
数组语法
我们可以把一个数组传给 v-bind:class,以应用一个 class 列表:
class 列表
1 <div id="div4" v-bind:class="[activeClass, errorClass]"></div>
2 <script type="text/javascript">
3 new Vue({
4 el: "#div4",
5 data: {
6 activeClass: 'active',
7 errorClass: 'text-danger'
8 }
9 })
10 </script>
11 ————————————————
12
13 // 预览
14
15 <div id="div4" class="active text-danger"></div>
class 列表使用三元表达式
如果你也想根据条件切换列表中的 class,可以用三元表达式:
1 <div id="div5" v-bind:class="[isActive ? activeClass : '', errorClass]"></div>
2 <script type="text/javascript">
3 new Vue({
4 el: "#div5",
5 data: {
6 isActive: true,
7 activeClass: 'active',
8 errorClass: 'text-danger'
9 }
10 })
11 </script>
12 ————————————————
13
14 // 预览
15
16 <div id="div5" class="active text-danger"></div>
class 列表使用对象语法
1 <div id="div6" v-bind:class="[{ active: isActive }, errorClass]"></div>
2 <script type="text/javascript">
3 new Vue({
4 el: "#div6",
5 data: {
6 isActive: true,
7 errorClass: 'text-danger'
8 }
9 })
10 </script>
11 ————————————————
12
13 // 预览
14
15 <div id="div6" class="active text-danger"></div>
class 综合练习
1 <style>
2 .red {
3 color: red;
4 }
5
6 .thin {
7 font-weight: 200;
8 }
9
10 .italic {
11 font-style: italic;
12 }
13
14 .active {
15 letter-spacing: 0.5em;
16 }
17 </style>
18
19
20
21 <body>
22 <div id="app">
23 <h1 class="red thin">这是一个很大很大的H1,大到你无法想象!!!</h1>
24
25 <!-- 第一种使用方式,直接传递一个数组,注意: 这里的 class 需要使用 v-bind 做数据绑定 -->
26 <h1 :class="['thin', 'italic']">这是一个很大很大的H1,大到你无法想象!!!</h1>
27
28 <!-- 在数组中使用三元表达式 -->
29 <h1 :class="['thin', 'italic', flag?'active':'']">这是一个很大很大的H1,大到你无法想象!!!</h1>
30
31 <!-- 在数组中使用 对象来代替三元表达式,提高代码的可读性 -->
32 <h1 :class="['thin', 'italic', {'active':flag} ]">这是一个很大很大的H1,大到你无法想象!!!</h1>
33
34 <!-- 在为 class 使用 v-bind 绑定 对象的时候,对象的属性是类名,由于 对象的属性可带引号,也可不带引号,所以 这里我没写引号; 属性的值 是一个标识符 -->
35 <h1 :class="classObj">这是一个很大很大的H1,大到你无法想象!!!</h1>
36
37
38 </div>
39
40 <script>
41 // 创建 Vue 实例,得到 ViewModel
42 var vm = new Vue({
43 el: '#app',
44 data: {
45 flag: true,
46 classObj: { red: true, thin: true, italic: false, active: false }
47 },
48 methods: {}
49 });
50 </script>
51 </body>
1 我们可以把一个数组传给 v-bind:class,以应用一个 class 列表
2
3 <div id="div4" v-bind:style="[baseStyles, overridingStyles]">{{ msg }}</div>
4 <script type="text/javascript">
5 new Vue({
6 el: "#div4",
7 data: {
8 msg: "我是数组绑定方法",
9 baseStyles: {
10 color: 'green',
11 fontSize: '30px'
12 },
13 overridingStyles: {
14 'font-weight': 'bold'
15 }
16 }
17 })
18 </script>

浙公网安备 33010602011771号