Vue-10-Class的动态绑定

背景

当我们需要操作元素的 class 列表时,我们可以使用 v-bind 实现,但是直接计算整体字符显得很笨,针对这个问题,Vue 做了专门的加强,我们可以通过 v-bind:classclass 实现动态绑定。

实践

作用于对象(模板内联)

效果:我们可以通过操作 Vueattribute 来实现对 class 的更改。

代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
    <title>Document</title>
    <style type="text/css">
        .red {background-color: red}
        .bb {height: 400px;}
        .normal {width: 400px;}
        </style>
</head>
<body>
    <div id="vpp" class='normal' v-bind:class="{red:isred,bb:isbb}">
        <p>msg</p>
    </div>

    <script>
        app = new Vue({
            el: "#vpp",
            data: {
                isred: true,
                isbb: false
            }
        })
    </script>
</body>
</html>

页面效果

Tip

实际上,class 的动态绑定是通过 Vue data 属性的 truthiness(是否为真)来控制的。如果为真则加载 class,如果为假则不加载。

如上,当 isbbtrue 时,isbb 对象的 key==>bb 样式才会加载。

默认样式为 div400px;背景颜色为红色。当我们修改 isbb 属性值后,div 的高度也变为 400px

作用于对象(非模板内联)

上面的class是在模板语法内条件使能的,如果你觉得麻烦,也可以选择一下这种更直接的方法,即模板中定义对象的整体,Vue的data中定义对象的具体内容。

代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
    <title>Document</title>
    <style type="text/css">
        .red {background-color: red}
        .bb {height: 400px;}
        .normal {width: 400px;}
        </style>
</head>
<body>
    <div id="vpp" class='normal' v-bind:class="clsObj">
        <p>msg</p>
    </div>
    <script>
        app = new Vue({
            el: "#vpp",
            data: {
                isred: true,
                isbb: false,
                clsObj: {
                    red: true,
                    bb: false
                }
            }
        })
    </script>
</body>
</html>

页面效果

和上面的一样

以上就是今天的全部内容了,感谢您的阅读,我们下节再会。

赞赏