Day 19. v-bind - Class的绑定

在Vue中,如果我们需要绑定属性就可以用到v-bind,是不是有对这个指令有印象啊,我们在Day 14的时候有大略提到,这几天再来特别介绍v-bind用在class跟style上的binding吧。

v-bind可以用表达式也可以用物件(object)、阵列(array)

基本的属性绑定

这里先举例用v-bind绑定连结还有输入框,其实大部分的属性都可以用这种方式做绑定,资料绑定之後才能传到後台,这样可以做到全组件由後端(资料)控管,使用资料去驱动画面。

<div id="app">
    <a v-bind:href="link.href" v-bind:target="link.target">{{link.content}}</a>
    <input v-bind:type="input.type">
</div>

 <script>
    var vm = new Vue({
        el: '#app',
        data() {
            return {
                link: {
                    href: 'https://www.google.com.tw/',
                    target: '_blank',
                    content: 'Google'
                },
                input: {
                    type: "text"
                }
            }
        },
    });
</script>

执行後我们可以看到有个Google的link,店进去就会到google首页,打开控制台也可以看到我们绑定的属性都变成data中设定的样子。
https://ithelp.ithome.com.tw/upload/images/20210929/20131400StHZJaK4Ua.png

接着我们打开vue devtools找到我们的input这个物件按编辑,就可以直接改变它的type,当我们改成checkbox、password可以看到画面上的框框也跟着改变。
https://ithelp.ithome.com.tw/upload/images/20210929/20131400lkjY936EzU.png
https://ithelp.ithome.com.tw/upload/images/20210929/20131400wU4uKo8ZjT.png

绑定Class

Object Syntax

我们可以传给v-bind:class一个对象,以动态的方式切换class:

<div v-bind:class="{ active: isActive }"></div>

大括号中冒号前面是class name後面是状态(true/false)

完整版范例
我们设定了宽100px,高也100px的正方形区域,且让文字置中,并将active设定成底色为黄色,在data中我们可以看到isActiveactive是否被绑定在class上取决於isActive,如果isActivetrueactive就会被绑定,如果为false则不会。

<div id="app">
    <div v-bind:class="{active:isActive}" style="width: 100px;height: 100px;text-align: center;line-height: 100px;">
        Hello vue
    </div>
</div>

<script>
    var vm = new Vue({
        el: '#app',
        data: {
            isActive: true
        },
    });
</script>
<style>
    .active {
        background-color: yellow;
    }
</style>

https://ithelp.ithome.com.tw/upload/images/20210929/20131400BszAKNNAIi.png
https://ithelp.ithome.com.tw/upload/images/20210929/20131400gMaDfbX82f.png

与普通class并用

v-bind:class 指令也可以与普通的 class attribute 共存,这个例子我们在前面加上一个class="test",并将test设定字的尺寸为25px。

<div id="app">
    <div class="test" v-bind:class="{active:isActive}"
        style="width: 100px;height: 100px;text-align: center;line-height: 100px;">
        Hello vue
    </div>
</div>

<script>
    var vm = new Vue({
        el: '#app',
        data: {
            isActive: true
        },
    });
</script>
<style>
    .test {
        font-size: 25px;
    }

    .active {
        background-color: yellow;
    }
</style>

https://ithelp.ithome.com.tw/upload/images/20210929/20131400cLeMnYlhJ0.png

绑定多个动态class

如果我们需要多个动态的class可以直接加在放面,也可以用阵列的形式。

<div id="app">
    <div class="test" v-bind:class="{active:isActive,brown:isBrown}"
        style="width: 100px;height: 100px;text-align: center;line-height: 100px;">
        Hello vue
    </div>
</div>

<script>
    var vm = new Vue({
        el: '#app',
        data: {
            isActive: true,
            isBrown: true
        },
    });
</script>
<style>
    .test {
        font-size: 25px;
    }

    .active {
        background-color: yellow;
    }

    .brown {
        color: brown;
    }
</style>

https://ithelp.ithome.com.tw/upload/images/20210929/20131400qHbTDtw9lR.png

数据型式

v-bind:class="{active:isActive,brown:isBrown}"

也可以用数据型式:

v-bind:class="[‘active’,’brown’ ]"

但在这里是用静态的方式加上这个class不是动态的。

三元运算

若想要用动态的方式加上class还可以用三元运算:

v-bind:class="[isActive? 'active':' ']"

这里我们用isActive来判断,若isActivetrue我们的元素会绑定active样式,若isActivefalse我们的元素会绑定一个空样式,isBrown也可以用一样的写法。

对了,提醒一下!如果觉得一直重复打v-bind很麻烦,它的缩写是:欧ヽ( ° ▽°)ノ

时间过得好快哦,怎麽一转眼就十月了(。T ω T。)


<<:  [Day 27] Bevy 游戏引擎 (Part 1)

>>:  从零开始的8-bit迷宫探险【Level 23】长老,这个水晶值多少钱?

Day 07 - 智慧城市Go Smart Award 经历(1) - 初赛

图片来源 今天开始来分享在开赛前几篇的目标设定中Q1设定中一直提到的Go Smart Award,...

第二十七章、燃烧吧!Three.js 小宇宙!(伍)

前言 嗨大家好,今天是铁人赛的第 27 天,也是本系列 Three.js 最後一篇罗,照惯例,最後一...

Day25 [实作] 一对一视讯通话(5): 切换设备

如果我们的电脑有两个摄影机,就会有切换装置的需求,今天我们就来加入这个功能 在 index.html...

day25 : kong api gateway(下)

kong的安装我同样会透过operator的方式进行,相信经过了这几天应该很多人都感受到operat...

Day 57. 系列完结心得

嗨,我是Bear。 遵守在Day30时与自己的约定,於年前写完所有设计模式。 稍晚会将目录更新至Da...