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'}]"       //能够直接挂在对象,也能够用一个变量,对象中若是出现连字符的,用驼峰的形式表示,值要是字符串
相关文章
相关标签/搜索