Vue 中的樣式綁定

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標籤上就會有個值爲activatedclass開發

那當我點擊第二下時,頁面會變成默認顏色嗎?很顯然是不會的,那要怎麼實現呢?只需作一個簡單的判斷字符串

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'}]"       //能夠直接掛在對象,也能夠用一個變量,對象中若是出現連字符的,用駝峯的形式表示,值要是字符串
相關文章
相關標籤/搜索