04.vue-charp-04 v-bind及其class与style绑定

Posted easy5weikai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了04.vue-charp-04 v-bind及其class与style绑定相关的知识,希望对你有一定的参考价值。

了解v-bind指令

我们已经介绍了指令v-bind的基本用法以及它的语法糖,它的主要用法是动态更新html元素上的属性

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

绑定class的几种方式

对象语法

  • 使用data
<body>
    <div id="app">
        <div class="class1" :class="{‘class2‘:hasClass2, ‘class3‘:hasClass3}">对象语法:使用data </div>
    </div>
    <script src="../node_modules/_vue@2.6.11@vue/dist/vue.min.js"></script>
    <script>
        var app = new Vue({
            el: ‘#app‘,
            data: {
                hasClass2: true,
                hasClass3: false
            }
        })
    </script>
</body>

html 被渲染为:

   <div class="class1" :class="{‘class2‘:hasClass2, ‘class3‘:hasClass3}">对象语法:使用data </div>
  • 使用计算属性

     <div class="class1" :class="classesOfcomputed">对象语法:使用计算属性 </div>
        <script>
            var app = new Vue({
                el: ‘#app‘,
                data: {
                    hasClass2: true,
                    hasClass3: false
                },
                computed: {
                    classesOfcomputed: function () {
                        //返回一个对象
                        return {
                            ‘class2‘: this.hasClass2,
                            ‘class3‘: this.hasClass3
                        }
                    }
                },
            })
        </script>
    

    html 被渲染为:

    <div class="class1" :class="classesOfcomputed">对象语法:使用计算属性 </div>
    

    数组语法

     <div id="app">
            <div class="class1" :class="[class4, class5]">数组语法:使用data </div>
            <div class="class1" :class="[{‘class2‘:hasClass2}, class3]">数组语法中使用对象语法(使用data) </div>
            <div class="class1" :class="[classesOfcomputed]">数组语法中使用对象语法 (使用计算属性)</div>
        </div>
        <script src="../node_modules/_vue@2.6.11@vue/dist/vue.min.js"></script>
        <script>
            var app = new Vue({
                el: ‘#app‘,
                data: {
                    hasClass2: true,
                    class3: ‘class3-value‘,
                    class4: ‘class4-value‘,
                    class5: ‘class5-value‘,
                    size: ‘large‘,
                    disabled: true
                },
                computed: {
                    classesOfcomputed: function () {
                        //返回一个对象
                        return [
                            ‘btn‘,
                            {
                                [‘btn-‘ + this.size]: this.size != ‘‘,
                                [‘btn-disabled‘]: this.disabled
                            }
                        ]
    
                    }
                },
            })
        </script>
    

    html渲染为:

    <div id="app">
        <div class="class1 class4-value class5-value">数组语法:使用data </div>
        <div class="class1 class2 class3-value">数组语法中使用对象语法(使用data) </div>
        <div class="class1 btn btn-large btn-disabled">数组语法中使用对象语法 (使用计算属性)</div>
    </div>
    

    ? 使用计算属性给元素动态设置类名,在业务中经常用到,尤其是在写复用的组件时,所以在开发过程中,如果表达式较长或逻辑复杂,应该尽可能地优先使用计算属性

在组件上使用

仅适用于自定义组件的最外层是一个根元素

<body>
    <div id="app">
        <my-component :class="{‘class2‘:hasClass2}"></my-component>
    </div>
    <script src="../node_modules/_vue@2.6.11@vue/dist/vue.min.js"></script>
    <script>
        //定义全局组件
        Vue.component(‘my-component‘, {
            template: ‘<p class="class1">这种用法仅适用于自定义组件的最外层是一个根元素,否则会无效,</p>‘
        })

        var app = new Vue({
            el: ‘#app‘,
            data: {
                hasClass2: true
            }
        })
    </script>
</body>

html渲染为:

<p class="class1 class2">这种用法仅适用于自定义组件的最外层是一个根元素,否则会无效,</p>

? 这种用法仅适用于自定义组件的最外层是一个根元素,否则会无效,当不满足这种条件或需要给具体的子元素设置类名时,应当使用组件的props来传递。这些用法同样适用于下一节中绑定内联样式 style的内容。

绑定内联样式(v-bind:style)

使用v-bind:style

<body>
    <div id="app">
        <div style="margin:50px;" :style="{‘color‘:color, ‘font-size‘:fontSize}">:style绑定样式(使用data)</div>
        <div style="margin:50px;" :style="styles">:style绑定样式(使用数组对象)</div>
    </div>
    <script src="../node_modules/_vue@2.6.11@vue/dist/vue.min.js"></script>
    <script>
        var app = new Vue({
            el: ‘#app‘,
            data: {
                color: ‘red‘,
                fontSize: 14 + "px",
                styles: {
                    color: ‘blue‘,
                    fontSize: 30 + "px"
                }
            }
        })
    </script>
</body>

源码地址

https://github.com/K-Artisan/vue.js-in-ation-book-note

以上是关于04.vue-charp-04 v-bind及其class与style绑定的主要内容,如果未能解决你的问题,请参考以下文章

Vue教程v-bind指令动态绑定

Vue躬行记——样式和表单

视频总结 1

v-bind 表达式的值不能为空。在“v-bind:items”中找到

v-bind特性

v-bind v-on