class
的對象綁定在開發的過程當中,不免會給dom
元素添加一些樣式,在 Vue 之中咱們該如何綁定樣式呢?編程
如今有這樣一個想法,div
被點擊一次,變成紅色,當再次被點擊時,恢復爲默認的顏色, 再點擊一次又變成紅色,想實現這樣的操做,若是憑藉之前對 Vue 的瞭解,好像是沒有辦法實現的,由於咱們很難想到數據如何和樣式進行綁定,Vue 是面向數據的一種編程方式,它不在是直接操做dom
的編程方式了,因此呢,咱們但願某些數據和樣式作一個關聯,數據一變,樣式就會變:數組
<div id="app"> <div @click="handleDivClick" :class="{activated: isActivated}" >Hello world</div> </div> let vm = new Vue({ el: '#app', data: { isActivated:false, //初始化時,這個值爲 false,因此 activated 確定不會顯示 }, methods: { handleDivClick(){ this.isActivated = true } } })
dom
裏面只要有:
的地方都是js
的表達式,這裏面:class
的意思是:Hello World
這個div
有個class
值爲activated
,它到底現不顯示,取決於data
裏的isActivated
這個變量是true
仍是false
。這裏面初始化時,這個值爲false
,因此activated
確定不會顯示。app
當我點擊時,我但願將這個class
展現出來,只需將isActivated
值變成true
,數據變化,頁面剛好經過:class
和數據進行了綁定,因此isActivated
值變爲true
時,前面樣式的名字就會顯示在頁面上,經過這個功能就能實現,點擊一次變紅的效果。dom
那如何實現再點擊一次變成默認顏色呢?只需對這個值取反就好了。this
handleDivClick(){ this.isActivated = !this.isActivated //這裏不讓它等於 true,而是對這個值進行取反 }
這就是藉助class
和對象的形式實現數據和樣式的綁定,稱做爲class
的對象綁定。code
class
的數組綁定<div id="app"> <div @click="handleDivClick" :class="[activated]" >Hello world</div> </div> let vm = new Vue({ el: '#app', data: { activated: '' //初始化時,activated 爲空,因此 class 確定是沒有值的。 }, methods: { handleDivClick(){ this.activated = 'activated' } } })
:class
那邊不在是一個對象了,取而代之我去寫一個數組,在數組裏面呢,我寫個activated
,這個時候它指的是啥呢,應該這麼去讀Hello world
這個div
上的class
,這個class
是什麼呢?它顯示的是activated
這個變量裏的內容。對象
初始化時,activated
爲空,因此class
確定是沒有值的。經過這種寫法,我想把Hello world
樣式置紅,應該怎麼寫呢?只需將activated
這個變量由空字符串改變爲'activated'
,就能夠了,這樣div
標籤上就會有個值爲activated
的class
。開發
那當我點擊第二下時,頁面會變成默認顏色嗎?很顯然是不會的,那要怎麼實現呢?只需作一個簡單的判斷字符串
handleDivClick(){ if(this.activated === 'activated'){ this.activated = '' }else{ this.activated = 'activated' } }
上面這樣寫呢,代碼有點冗餘,能夠用一個三元表達式來代替:class
handleDivClick(){ this.activated = this.activated === 'activated' ? '' : 'activated' }
這裏是藉助class
和數組相綁定,這個數組表明的是什麼呢?它表明的是一個變量,class
上會顯示這個變量的內容。
既然class
是一個數組,就能夠定義多個變量,:class="[activated,activatedOne]"
經過這兩種方式,咱們能夠動態的向一個dom
元素上,添加或刪除不一樣的class
,從而實現頁面效果的一個變動,
style
改變dom
樣式講到這裏,你是否是會想,我能夠不能夠經過改變style
,來改變頁面的樣式,顯然是能夠的。那如何來實現呢?
<div id="app"> <div @click="handleDivClick" :style="styleObj" >hello world</div> </div> let vm = new Vue({ el: '#app', data: { styleObj: { color: 'black' //這種寫法是,div 有一個內聯樣式,內容是 color: black } }, methods: { handleDivClick(){ this.styleObj.color = this.styleObj.color === 'black ? 'red' : 'black' } } })
內聯樣式有兩種定義方式,一種是和數組綁定,一種是和對象綁定。
:style="styleObj"
看到:
就會想到這是一個指令,後面的styleObj
必定是一個js
表達式,它對應的就是數據的一項。應該怎麼寫呢?
styleObj: { color: 'black' //這種寫法是,div 有一個內聯樣式,內容是 color: black }
這種寫法是,div
有一個內聯樣式,內容是color: black
。
當我點擊div
時,要改變它顏色,該怎麼實現,實際上是和上面改變class
的方法是同樣的。
methods: { handleDivClick(){ this.styleObj.color = this.styleObj.color === 'black ? 'red' : 'black' } }
這是用style
對象綁定,那要是用數組綁定呢?用數組綁定,可比對象簡單多了。
:style="[styleObj,{fontSize:'20px'}]" //能夠直接掛在對象,也能夠用一個變量,對象中若是出現連字符的,用駝峯的形式表示,值要是字符串