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>

最终渲染结果:<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>

二、数组语法
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>
三、在组件上使用
如果直接在自定义组件上使用class或:class,样式规则会直接应用到这个组件的根元素上,例如声明一个简单的组件:

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

  • 43
    点赞
  • 166
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Vue3中,可以使用动态绑定class的方式有多种。其中一种是使用对象语法。你可以通过在:class属性中传入一个对象来动态切换class。例如,你可以在模板中使用以下代码来实现动态绑定class: ```html <div :class="{'active': isActive, 'fw6': isA}"></div> ``` 在这个例子中,isActive和isA是在Vue实例的data中定义的变量。当isActive为true时,该元素将具有active类;当isA为true时,该元素将具有fw6类。你可以根据需要添加或删除其他类。 另一种方式是使用数组语法。你可以在:class属性中传入一个数组,数组中的每个元素都是一个类名。例如: ```html <div :class="\[isActive ? 'active' : '', isA ? 'fw6' : ''\]"></div> ``` 在这个例子中,如果isActive为true,则元素将具有active类;如果isA为true,则元素将具有fw6类。如果变量的值为false,则对应的类名将被省略。 这些是Vue3中动态绑定class的两种常见方式。你可以根据自己的需求选择适合的方式来实现动态绑定class。 #### 引用[.reference_title] - *1* [初识Vue 3.0 —— 动态class绑定](https://blog.csdn.net/qq_38499671/article/details/111994341)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [vue动态绑定class几种方法](https://blog.csdn.net/u013994400/article/details/125432141)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值