先建置 Vue
資料的基本狀態:
<script>
var app = new Vue({
el: '#app',
data: {
isTransform: false,
boxColor: false,
objectClass: {
'rotate': false,
'bg-danger': false,
},
arrayClass: [],
styleObject: {
backgroundColor: 'red',
borderWidth: '5px'
},
styleObject2: {
boxShadow: '3px 3px 5px rgba(0, 0, 0, 0.16)'
},
styleObject3: {
userSelect: 'none'
}
},
});
</script>
我們在動態切換 class
的時候會採用 v-bind
指令來綁定 class
屬性,但除了一種 class
之外我們也可以採用多種 class
並可以用物件的寫法來撰寫,例如下面的例子,我們把 .rotate
和 .bg-danger
兩種 class
寫成物件並綁在 .box
內,再藉由 button
的 click
和 input
的 checkbox
勾選來切換資料狀態,進而達到添加 class
到 .box
內:
<div id="app">
<h4>物件寫法</h4>
<div class="box" :class="{ 'rotate' : isTransform , 'bg-danger' : boxColor }"></div>
<p>請為此元素加上動態 className</p>
<hr>
<button class="btn btn-outline-primary" v-on:click="isTransform = !isTransform">選轉物件</button>
<div class="form-check">
<input type="checkbox" class="form-check-input" id="classToggle1" v-model="boxColor">
<label class="form-check-label" for="classToggle1">切換色彩</label>
</div>
</div>
除了可以直接在 class
內用物件的寫法來撰寫之外,我們也可以把這些 class
在 Vue
內單獨寫成一個物件:
<div id="app">
<h5>物件寫法 2</h5>
<div class="box" :class="objectClass"></div>
<hr>
<button class="btn btn-outline-primary" @click="objectClass.rotate = !objectClass.rotate">選轉物件</button>
<div class="form-check">
<input type="checkbox" class="form-check-input" id="classToggle2" v-model="objectClass['bg-danger']">
<label class="form-check-label" for="classToggle2">切換色彩</label>
</div>
</div>
上述除了 .box
內的動態 class
換成物件的資料狀態外,對於 button
的 click
和 input
的 checkbox
的勾選,資料綁定上都要採用讀取物件屬性的方式
除了物件的寫法,我們也可以採用陣列的寫法,而這個寫法適合不知道 class
有多少個時候做使用,如下:
<div id="app">
<h4>陣列寫法</h4>
<button class="btn" :class="['btn-outline-primary','active']">請操作本元件</button>
</div>
以上我們是直接把 class
直接寫在陣列內,而我們也可以用預先定義好的空陣列綁上去,再藉由 button
的 click
和 input checkbox
的勾選來改變資料狀態:
<div id="app">
<h4>陣列寫法</h4>
<button class="btn" :class="arrayClass">請操作本元件</button>
<div class="form-check">
<input type="checkbox" class="form-check-input" id="classToggle3" v-model="arrayClass" value="btn-outline-primary">
<label class="form-check-label" for="classToggle3">切換樣式</label>
</div>
<div class="form-check">
<input type="checkbox" class="form-check-input" id="classToggle4" v-model="arrayClass" value="active">
<label class="form-check-label" for="classToggle4">啟用元素狀態</label>
</div>
</div>
這裡要注意的是,input
的 v-model
綁定了 arrayClass
但是 class
的名字是藉由 value
這個屬性傳送進去的
再來是行內樣式,上述講到了物件的寫法和陣列的寫法,那當然行內樣式我們也可以採用相同的方式:
<div class="box" :style="{ 'backgroundColor': 'red'}"></div>
值得一提的是,style
屬性必須要用駝峰式來撰寫,而我們不只可以添加一種屬性,也可以添加多種,就像物件那樣:
<div class="box" :style="{ 'backgroundColor': 'red', 'borderWidth':'5px'}"></div>
最後我們也可以把這些屬性寫成物件放進去:
<div class="box" :style="styleObject"></div>
當然我們也可以用陣列的方式傳送多個物件:
<div class="box" :style="[styleObject,styleObject2]"></div>