Vue——v-bind及class与style绑定

在数据绑定中,最常见的就是元素样式名称class和内联样式style的动态绑定。

1.绑定class的几种方式

(1)对象语法

给v-bind:class绑定一个对象,通过对象的真假来切换class。

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="vue.min.js"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
    <div id="app">
        <div v-bind:class="{'active': isActive}"></div>
        <!--类名active会依赖数据isActive,当其为true的时候会拥有类名active,当其为false的时候没有-->
    </div>
    <script>
        var app = new Vue({
            el:"#app",
            data: {
                isActive: true
            }
        });
    </script>
</body>
</html>
复制代码

渲染结果:

<div class="active"></div>

对象之中可以传入多个属性,来动态切换class,另外,:class可以与普通class共存。

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="vue.min.js"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
    <div id="app">
        <div class="static" :class="{ 'active':isActive, 'error':isError }"></div>
    </div>

    <script>
        var app = new Vue({
            el: "#app",
            data: {
                isActive: true,
                isError: true
            }
        })
    </script>
</body>
</html>
复制代码

渲染结果:

<div class="static active error"></div>

当class表达式过长或逻辑复杂时,可以绑定一个计算属性。

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="vue.min.js"></script>
</head>
<body>
<div id="app">
    <div :class="classes"></div>
</div>
<script>
    var app = new Vue({
        el: "#app",
        data: {
            isActive: true,
            error:null
        },
        computed: {
            classes: function () {
                return {
                    active: this.isActive && !this.error,  //true && true == true
                }
            }
        }
    })
</script>
</body>
</html>
复制代码

(2)数组语法

当需要应用多个class时,可以使用数组语法,给:class绑定一个数组,应用一个class列表。

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="vue.min.js"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
    <div id="app">
        <div :class="[activeCls, errorCls]"></div>
    </div>
    <script>
        var app = new Vue({
            el: "#app",
            data: {
                activeCls: 'active',
                errorCls: 'error'
            }
        })
    </script>

</body>
</html>
复制代码

渲染结果:

<div class="active error"></div>

可以使用三元表达式来判断。

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="vue.min.js"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
    <div id="app">
        <div :class="[isActive ? activeCls : '', errorCls]"></div>
        <!--对象语法和数组语法混用-->
        <div :class="[{'active' : isActive}, errorCls]"></div>

    </div>
    <script>
        var app = new Vue({
            el: "#app",
            data: {
                isActive: true,
                activeCls: 'active',
                errorCls: 'error'
            }
        })
    </script>
</body>
</html>
复制代码

 

2.绑定内联样式

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="vue.min.js"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
    <div id="app">
        <div :style="{'color':color,'fontSize':fontSize + 'px'}">文本</div>
    </div>
    <script>
        var app = new Vue({
            el:"#app",
            data: {
                color: 'yellow',
                fontSize:34
            }
        })
    </script>

</body>
</html>
复制代码

还可以在data中直接定义。

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="vue.min.js"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
    <div id="app">
        <div :style="styles">实例</div>
    </div>
    <script>
        var app = new Vue({
            el: "#app",
            //直接将样式写到data里面会更快捷
            data: {
                styles: {
                    color:'yellow',
                    fontSize: '34px'
                }
            }
            // 使用计算属性也是可以
            // computed:{
            //     styles: function () {
            //         return {
            //         color:'yellow',
            //         fontSize: '34px'
            //     }
            //     }
            }
        })
    </script>
</body>
</html>
复制代码

 

posted @   明王不动心  阅读(552)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
历史上的今天:
2019-04-12 pycharm快捷键
点击右上角即可分享
微信分享提示