• vue动态绑定:class的几种方式


    一、对象语法

    1、给v-bind:class 设置一个对象,可以动态地切换class,例如:

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

    最终渲染结果:

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

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

    复制代码
    <div id="app">
        <div class="static" :class="{'active':isActive,'error':isError}"></div>
    </div>
    <script>
    var app = new Vue({
        el:'#app',
        data:{
            isActive:true,
            isError:false
        }
    })
    </script>
    复制代码

    最终渲染结果(当数据isActive或isError变化时,对应的class也会更新):

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

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

    复制代码
    <div id="app">
        <div :class="classes"></div>
    </div>
    <script>
    var app = new Vue({
        el:'#app',
        data:{
            isActive:true,
            isError:null
        },
        computed:{
            classes(){
                return {
                    active:this.isActive && !this.error,
                    'text-fail':this.error && this.error.type ==='fail'
                }
            }
        }
    })
    </script>
    复制代码

    除了计算属性,也可以直接绑定一个Object类型的数据,或者使用类似计算属性的methods.

     二、数组语法

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

    复制代码
    <div id="app">
        <div :class="[atvieCls,errorCls]"></div>
    </div>
    <script>
    var app = new Vue({
        el:'#app',
        data:{
            atvieCls:'active',
            errorCls:'error'
        }
    })
    </script>
    复制代码

    渲染后的结果为:

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

    2、使用三元表达式,根据条件切换class(当数据isActive为真时,样式active才会被应用):

    复制代码
    <div id="app">
        <div :class="[isActive ? activeCls : '',errorCls]"></div>
    </div>
    <script>
    var app = new Vue({
        el:'#app',
        data:{
            isActive:true,
            atvieCls:'active',
            errorCls:'error'
        }
    })
    </script>
    复制代码

    渲染后的结果为:

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

    3、class有多个条件时,这样写较为烦琐,可以在数组语法中使用对象语法:

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

    渲染后的结果为:

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

    4、与对象语法一样,也可以使用data、computed、method三种方法,以计算属性为例:

    复制代码
    <div id="app">
        <button :class="classes"></button>
    </div>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                size: 'large',
                disabled: true
            },
            computed: {
                classes: function () {
                    return [
                        'btn',
                        {
                            ['btn-'+this.size]: this.size!=='',
                            ['btn-disabled']: this.disabled,
                        }
                    ]
                }
            }
        })
    </script>
    复制代码

    渲染后的结果为:

    <div class="btn btn-large btn-disabled"></div>

     以上,样式btn会始终应用,当数据size不为空时,会应用样式前缀btn-,后加size的值;当数据disabled为真时,会应用样式btn-disabled.

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

    三、在组件上使用

     如果直接在自定义组件上使用class或:class,样式规则会直接应用到这个组件的根元素上,例如声明一个简单的组件:

    <script>
        Vue.component('my-component', {
            template: '<p class="article">一些文本</p>'
        })
    </script>

    然后在调用该组件时,使用对象语法或数组语法给组件绑定class,以对象语法为例:

    复制代码
    <div id="app">
        <my-component :class="'active':isActive"></my-component>
    </div>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                isActive: true
            }
        })
    </script>
    复制代码

    最终组件渲染后的结果为:

    <p class="article active">一些文本</p>
    code by trister
  • 相关阅读:
    POJ 2752 Seek the Name, Seek the Fame
    POJ 2406 Power Strings
    KMP 算法总结
    SGU 275 To xor or not to xor
    hihocoder 1196 高斯消元.二
    hihoCoder 1195 高斯消元.一
    UvaLive 5026 Building Roads
    HDU 2196 computer
    Notions of Flow Networks and Flows
    C/C++代码中的笔误
  • 原文地址:https://www.cnblogs.com/tristers/p/13553453.html
Copyright © 2020-2023  润新知