1. 程式人生 > 其它 >vue 繫結class、v-bind:style(物件語法、陣列語法)

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>