zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    [置顶] windows player,wzplayerV2 for windows
    wzplayer 近期将会支持BlackBerry和WinPhone8
    wzplayerEx for android(真正硬解接口,支持加密的 player)
    ffmpeg for ios 交叉编译 (支持i686 armv7 armv7s) 包含lame支持
    ffmpeg for ios 交叉编译 (支持i686 armv7 armv7s) 包含lame支持
    编译cegcc 0.59.1
    wzplayer 近期将会支持BlackBerry和WinPhone8
    wzplayerEx for android(真正硬解接口,支持加密的 player)
    windows player,wzplayerV2 for windows(20140416)更新
    编译cegcc 0.59.1
  • 原文地址:https://www.cnblogs.com/tristers/p/13553453.html
Copyright © 2011-2022 走看看