美文网首页饥人谷技术博客
(Vue)v-­bind指令中class与style的绑定

(Vue)v-­bind指令中class与style的绑定

作者: 飞天小猪_pig | 来源:发表于2020-12-22 00:35 被阅读0次

在数据绑定中,最常见的两个需求就是元素的样式名称 class 和内联样式 style 的动态绑定,它们也是 HTML的属性,因此可以使用 v­bind 指令。我们只需要用 v­bind计算出表达式最终的字符串就可以,不过有时候表达式的逻辑较复杂,使用字符串拼接方法较难阅读和维护,所以 Vue.js 增强了对 class 和 style 的绑定。

1、 了解bind指令

链接的 href 属性和图片的 src属性都被动态设置了,当数据变化时,就会重新渲染。

<div id="app">
    <a v-bind:href="url">我是百度</a>
    <img :src="imgUrl" alt="">
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            url: "https://www.baidu.com",
            imgUrl: "https://www.baidu.com/img/fddong_e2dd633ee46695630e60156c91cda80a.gif"
        }
    })
</script>
2、绑定 class 的几种方式

(1) 对象语法
给 v­-bind:class 设置一个对象,可以动态地切换 class 值对应true ,false。其中注意的是绑定class对象语法:对象的键是类名,值是布尔值。

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        .divStyle {
            background-color: red;
            width: 100px;
            height: 100px;
        }
    </style>
</head>
<body>
    <div id="app">
        绑定class对象语法:对象的键是类名,值是布尔值
        <div :class="{divStyle:isActive}"></div>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el: "#app",
            data: {
                isActive: true
            }
        })
    </script>
</body>

示例如下:需求点击输入按钮切换红、蓝

<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
    .bntBackgroundRed {
        background-color: red;
    }

    .bntBackgroundBlue {
        background-color: blue;
    }
</style>
</head>
<body>
<div id="app">
    <input type="button" value="点击我切换红、蓝" :class="{bntBackgroundRed:isBack,bntBackgroundBlue:!isBack}" 
    v-on:click="changeColor">
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
<script>
    var app = new Vue({
        el: "#app",
        data: {
            isBack: true
        },
        methods: {
            changeColor: function () {
                this.isBack = !this.isBack;
            }
        }
    })
</script>

</body>

当 class 的表达式过长或逻辑复杂时,还可以绑定一个计算属性,这是一种很友好和常见的用法,一般当条件多于两个时都可以使用 data或computed

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        .active {
            background-color: red;
            width: 100px;
            height: 100px;
        }
    </style>
</head>
<body>
    <div id="app">
       <div :class="classNames"></div>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el: "#app",
            data: {
               isActive:true,
               isBorder:false
            },
            computed:{
                classNames:function(){
                    return{
                        active: this.isActive && !this.isBorder  //active为类名
                    }
                }
            }
        })
    </script>
</body>

(2) 数组语法
当需要应用多个 class 时, 可以使用数组语法 , 给:class 绑定一个数组。 绑定class数组语法:数组中的成员直接对应类名。

 <head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        .active {
            background-color: black;
            width: 100px;
            height: 100px;
        }
        .error{
           border:10px solid red;
        }
    </style>
</head>
<body>
    <div id="app">
        绑定class数组语法:数组中的成员直接对应类名
       <div :class="[activeClass,errorClass]"></div>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el: "#app",
            data: {
               activeClass:'active',
               errorClass:'error'
            },
           
        })
    </script>
</body>

数组和对象混用实例,第一个成员是对象,第二个成员是数组成员如下:

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        .active {
            background-color: black;
            width: 100px;
            height: 100px;
        }
        .error{
           border:10px solid red;
        }
    </style>
</head>
<body>
    <div id="app">
        数组和对象混用,第一个成员是对象,第二个成员是数组成员
       <div :class="[{active:isActive},errorClass]"></div>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el: "#app",
            data: {
               isActive:false,
               errorClass:'error'
            },
           
        })
    </script>
</body>

3、绑定内联样式
(1)、对象语法
绑定内联样式:键代表style属性,值就代表属性所代表的值

 <div id="app">
        <div :style="{'color':color,'fontSize':fontSize+'px'}">我是男孩子</div>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el: "#app",
            data: {
                color: 'red',
                fontSize: 16
            },
        })
    </script>

注意 : css 属性名称使用驼峰命名( came!Case )或短横分隔命名( kebab­case)。简单一点就是:Vue中只要是大写字母,就会给你转换成“-加小写”。

1、fontSize:font-size
2、adDFASF:ad-d-f-a-s-f

(2)、数组语法:这种用法基本不用,原理和class用法类似。

1、应用多个样式对象时 , 可以使用数组语法 :在实际业务中,style 的数组语法并不常用 , 因为往往可以写在一个对象里面 : 而较为常用的应当是计算属性

2、使用 :style 时, Vue .js 会自动给特殊的 css 属性名称增加前缀, 比如 transform 。无需再加前缀属性!!!

相关文章

网友评论

    本文标题:(Vue)v-­bind指令中class与style的绑定

    本文链接:https://www.haomeiwen.com/subject/xxwogktx.html