可以用 v-bind 來設置樣式屬性。 Vue.js v-bind 在處理 class 和 style 時, 專門增強了它。表達式的結果類型除了字元串之外,還可以是對象或數組 為 v-bind:class 設置一個對象,從而動態的切換 class <!DOCTYPE html> <html> <he ...
可以用 v-bind 來設置樣式屬性。
Vue.js v-bind 在處理 class 和 style 時, 專門增強了它。表達式的結果類型除了字元串之外,還可以是對象或數組
為 v-bind:class 設置一個對象,從而動態的切換 class
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <style> .pink{background:pink} </style> <body> <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script> <div id="demo"> <div v-bind:class="{pink:show}">我是個框框</div> </div> <script> var vm=new Vue({ el: '#demo', data: { show:true } }) //vm監聽事件變化,第一個參數是新值,第二個參數是舊值 //kilometers值發生改變時,執行回調 vm.$watch("kilometers",function(newVal,oldVal){ document.getElementById ("info").innerHTML = "修改前值為: " + oldVal + ",修改後值為: " + newVal; }) </script>
也可以在對象中傳入更多屬性用來動態切換多個 class
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <style> .pink{background:pink} .blue{background: #abcdef;} </style> <body> <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script> <div id="demo"> <div v-bind:class="{pink:show,blue:show2}">我是個框框</div> </div> <script> var vm=new Vue({ el: '#demo', data: { show:false, show2:true } }) //vm監聽事件變化,第一個參數是新值,第二個參數是舊值 //kilometers值發生改變時,執行回調 vm.$watch("kilometers",function(newVal,oldVal){ document.getElementById ("info").innerHTML = "修改前值為: " + oldVal + ",修改後值為: " + newVal; }) </script>
也可以直接綁定數據里的一個對象
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <style> .pink{background:pink} .blue{background: #abcdef;} </style> <body> <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script> <div id="demo"> <div v-bind:class="myclass">我是個框框</div> </div> <script> var vm=new Vue({ el: '#demo', data: { myclass:{ "pink":true, "blue":false } } }) //vm監聽事件變化,第一個參數是新值,第二個參數是舊值 //kilometers值發生改變時,執行回調 vm.$watch("kilometers",function(newVal,oldVal){ document.getElementById ("info").innerHTML = "修改前值為: " + oldVal + ",修改後值為: " + newVal; }) </script>
也可以在這裡綁定返回對象的計算屬性
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <style> .base{color:orange} .pink{background:pink} .blue{background: #abcdef;} </style> <body> <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script> <div id="demo"> <div v-bind:class="myclass">我是個框框</div> </div> <script> var vm=new Vue({ el: '#demo', data: { "pink":true, "blue":{ value:true, type:"real" } }, //計算屬性並返回對象 computed:{ myclass:function(){ return { base:true, pink:this.pink && !this.blue.value,//粉色為true,藍色value為false,則顯示粉色 blue:this.blue.value && this.blue.type==="real"//藍色value為true,且type為real,則顯示藍色 } } } }) </script>
可以把一個數組傳給 v-bind:class
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <style> .base{color:orange} .pink{background:pink} .blue{background: #abcdef;} </style> <body> <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script> <div id="demo"> <div v-bind:class="[baseCls,pinkCls,blueCls]">我是個框框</div> </div> <script> var vm=new Vue({ el: '#demo', data: { "baseCls":"base", "pinkCls":"pink", "blueCls":"blue" } }) </script>
使用三元表達式來切換列表中的 class :
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <style> .base{color:#fff} .pink{background:pink} </style> <body> <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script> <div id="demo"> <div v-bind:class="[baseCls,isPink?pinkCls:'']">我是個框框</div> </div> <script> var vm=new Vue({ el: '#demo', data: { "baseCls":"base", "pinkCls":"pink", "isPink":true } }) </script>
這段代碼表示顏色白色始終存在,當isPink為真時,背景顏色顯示粉色
可以在 v-bind:style 直接設置樣式:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <style> .base{color:#fff} .pink{background:pink} </style> <body> <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script> <div id="demo"> <div v-bind:style="{color:mycolor,fontSize:myfontSize,backgroundColor:mybg}">我是個框框</div> </div> <script> var vm=new Vue({ el: '#demo', data: { "mycolor":"#fff", "myfontSize":"16px", "mybg":"pink" } }) </script>
也可以直接綁定到一個樣式對象,讓模板更清晰
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <style> .base{color:#fff} .pink{background:pink} </style> <body> <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script> <div id="demo"> <div v-bind:style="mystyle">我是個框框</div> </div> <script> var vm=new Vue({ el: '#demo', data: { mystyle:{ "color":"#fff", "font-size":"16px", "background":"#abcdef" } } }) </script>
可以使用數組將多個樣式對象應用到一個元素上
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <style> .base{color:#fff} .pink{background:pink} </style> <body> <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script> <div id="demo"> <div v-bind:style="[mystyle,mystyle2]">我是個框框</div> </div> <script> var vm=new Vue({ el: '#demo', data: { mystyle: { "color": "#fff", "font-size": "16px", "background": "#abcdef" }, mystyle2:{ "font-weight":"bold" } } }) </script>
註意:當 v-bind:style 使用需要特定首碼的 CSS 屬性時,如 transform ,Vue.js 會自動偵測並添加相應的首碼
這個功能實在是太耐思了!!!