← 返回首页
Vue基础教程(十四)
发表时间:2020-04-15 01:20:49
讲解Vue的样式绑定

由于class与style均为样式属性,因此可以通过v-bind指令进行属性绑定,属性表达式结果的类型可以是对象或数组。

1.对象绑定

例如:点击div时,即可改变actived的样式,实现切换文本颜色功能。

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document Title</title>
    <style>
        .actived {
            color: red;
        }
        .mylink{
            cursor: pointer;
        }
    </style>
</head>

<body>
<div id="app">
    <div @click="handleClick" class="mylink" :class="{actived:changeStyle}">Hello World</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>

    let vm = new Vue({
        el: '#app',
        data: {
            changeStyle: false
        },
        methods: {
            handleClick: function () {
                this.changeStyle = !this.changeStyle;
            }
        }
    })
</script>
</body>
</html>

2.数组绑定 上例也可以使用数组绑定,在样式的数组中定义了两个变量,分别是active和current,并将其放入data中。

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document Title</title>
    <style>
        .actived {
            color: red;
        }
        .mylink {
            cursor: pointer;
        }
    </style>
</head>

<body>
<div id="app">
    <div @click="handleClick" :class="[active,link]">Hello World</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    let vm = new Vue({
        el: '#app',
        data: {
            active: '',
            link: 'mylink'
        },
        methods: {
            handleClick: function () {
                this.active = this.active === 'actived' ? '' : 'actived';
            }
        }
    })
</script>
</body>
</html>

将active中的属性名置为空,link的属性名设为mylink,div上此时只有一个样式名link。当我执行点击操作时,会对active中的属性名进行判断,由于目前的属性名为空,因此会将actived样式添加到div上。

3.样式绑定综合实例

样式绑定实现选择支付方式效果。

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document Title</title>
    <style>
        #app{
            width: 450px;
            border-top: 1px solid #f5f5f5;
        }
        .active{
            background: url("http://img.simoniu.com/check.png") no-repeat right center;
            background-size: 30px 30px;
        }
        #paybox{
            width: 100%;
            background-color: white;
            padding:0 10px;
            margin-bottom: 20px;

        }
        .paylist{
            width: 150px;
        }
        #paybox img{
            width: 28px;
            margin-left: 20px;
        }
    </style>
</head>

<body>
<div id="app">
    <div>
        <div>支付方式</div>
        <div id="paybox">
            <div class="paylist"  v-for="(pay,index) in payList" :key="index" :class="{active:pay.active}"
                 @click="selectPay(index)"><span>{{pay.name}}</span><img :src="''+pay.logo" alt=""/></div>

        </div>
    </div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    let vm = new Vue({
        el: '#app',
        data: {
            payList: [
                {
                    "name": "支付宝",
                    "logo": "http://img.simoniu.com/alipay.jpg",
                    "active": true
                },
                {
                    "name": "微信",
                    "logo": "http://img.simoniu.com/weixin.jpg",
                    "active": false
                },
                {
                    "name": "银联",
                    "logo": "http://img.simoniu.com/unipay.jpg",
                    "active": false
                }
            ]
        },
        methods: {
            selectPay: function (index) {
                for (let i = 0; i < this.payList.length; i++) {
                    this.payList[i].active = false;
                }
                this.payList[index].active = true;
            }
        }
    })
</script>
</body>
</html>

运行效果: