Vue 中的样式绑定

栏目: JavaScript · 发布时间: 7年前

内容简介:在开发的过程中,难免会给现在有这样一个想法,

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 肯定不会显示。

当我点击时,我希望将这个 class 展示出来,只需将 isActivated 值变成 true ,数据变化,页面恰好通过 :class 和数据进行了绑定,所以 isActivated 值变为 true 时,前面样式的名字就会显示在页面上,通过这个功能就能实现,点击一次变红的效果。

那如何实现再点击一次变成默认颜色呢?只需对这个值取反就行了。

handleDivClick(){
    this.isActivated = !this.isActivated    //这里不让它等于 true,而是对这个值进行取反
}

这就是借助 class 和对象的形式实现数据和样式的绑定,称作为 class 的对象绑定。

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

上面这样写呢,代码有点冗余,可以用一个三元表达式来代替:

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'}]"       //可以直接挂在对象,也可以用一个变量,对象中如果出现连字符的,用驼峰的形式表示,值要是字符串

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

美工神话

美工神话

聂小燕、赵秋轶 / 人民邮电出版社 / 2006 / 52.00元

本书是一本专门针对网页美工设计的图书,全面、细致地介绍利用 Dreamweaver 8 和 Photoshop CS2 进行创意和设计的具体方法和步骤。 全书共分为4篇12章,在阐述网页色彩设计和风格创意的基础上,以生动的实例引导读者全面地掌握 Photoshop 网页元素设计与 Dreamweaver 网页布局美化。书中涉及了诸多网页美化所必须掌握的知识点,比如色彩知识,风格创意,网页规划......一起来看看 《美工神话》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

SHA 加密
SHA 加密

SHA 加密工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具