Vue - 動態切換ClassName及Style

  • 1806
  • 0
  • Vue
  • 2019-04-18

Vue - 多種動態切換ClassName及Style

第一種=>直接使用物件,rotate、bg-danger這兩個class直接對應到 isTransform、boxColor 這兩個變數的值

注意:如果class名稱有 dashed -  在class名稱外面一定要加上單引號 

<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>	

<script>
var app = new Vue({
	el: '#app',
	data: {
		isTransform: false,
		boxColor: false			
	},
});
</script>

第二種=> :class直接對應到一個物件:objectClass內的屬性,

物件裡面的屬性可透過button跟checkbox去控制

注意:bg-danger 這個屬性因為有符號 dashed - ,所以不能用 v-model="objectClass.bg-danger"  這種寫法,

要改用 objectClass['bg-danger']

<div id="app">
  <h5>物件寫法 2</h5>
  <div class="box" :class="objectClass"></div>	
  <hr>
  <button class="btn btn-outline-primary" v-on: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>	

<script>
	var app = new Vue({
		el: '#app',
		data: {			
			objectClass: {
				'rotate': false,
				'bg-danger': false,
			}			
		},
	});
</script>

如果只有部分的class 需要綁定屬性

可用以下的寫法

除了前面固定要顯示的class,再額外宣告一個:class ,如下圖:

 

第三種=> 陣列寫法,透過checkbox的v-model綁定到陣列:arrayClass,勾選的時候將value push到陣列裡面

<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>	
<script>
	var app = new Vue({
		el: '#app',
		data: {			
			// Array 操作
			arrayClass: []			
		},
	});
</script>

執行結果:

第四種,直接改style,

注意 style裡面的背景顏色屬性,原本應該是

style="background-color"

但是在這邊要改為  :style="{backgroundColor:'red'}"

<div id="app">
  <h4>綁定行內樣式</h4>
  <p>請用不同方式綁定以下行內樣式</p>
  <div class="box" :style="{backgroundColor:'red'}"></div>
  <div class="box" :style="styleObject"></div>
  <div class="box" :style="[{backgroundColor:'red'},{borderWidth:'5px'}]"></div>
  <div class="box" :style="[styleObject,styleObject2]"></div>
  <hr>
</div>	

<script
var app = new Vue({
	el: '#app',
	data: {		
		styleObject: {
			backgroundColor: 'red',
			borderWidth: '5px'
		},
		styleObject2: {
				boxShadow: '3px 3px 5px rgba(0, 0, 0, 0.16)'
	}
	},
});
</script>