Vue进阶 之 动态绑定Class 详解

这篇文章主要介绍了 vue 动态绑定 Class 的方式。

Vue.js 的核心是一个响应的数据绑定系统,它允许我们在普通 HTML 模板中使用特殊的语法将 DOM 绑定到底层数据。被绑定的 DOM 将与数据保持同步,每当数据有改动,相应的 DOM 视图也会更新。基于这种特性,通过 vue.js 动态绑定 class 就变得非常简单。


一、数据绑定

vue 指令以 v- 前缀标识,数据绑定的指令 v-bind:属性名,简写为 :属性名。例如:

<a v-bind:href="https://blog.csdn.net/XH_jing">我的首页</a>
// 简写:
<a :href="https://blog.csdn.net/XH_jing">我的首页</a>

二、动态绑定 Class

vue 的分隔符默认是 {{ }},在分隔符里面的字符串会被认为是数据变量,所以,可以通过 class="{{ className }}" 方式设置 class,但是 vue 不推荐这种方式与 v-bind:class 的方式混用,二者只能选其一。

v-bind:class 虽然与 class 属性里绑定变量的方式不能共存,却可以与原生的 class 特性共存, 一个 DOM 标签中允许同时出现原生 classv-bind:class

使用方法:

  1. v-bind:class 支持 string 类型,不建议这样使用,因为 string 值是固定不变的,无法实现动态改变 class 的需求

    <div :class=" 'classA classB' "> Demo1 </div>
    // 渲染后的HTML:
    <div class="classA classB"> Demo1 </div>
    
  2. v-bind:class 支持数据变量,当变量值改变时,将同时更新 classv-bind:class 指令的值限定为绑定表达式,如 javascript 表达式

    <div :class="classA"> Demo2 </div>
    
    // Javascript代码:
    <script>
    data: {
      classA: 'class-a'  // 当classA改变时将更新class
    }
    </script>
    
    // 渲染后的HTML:
    <div class="class-a"> Demo2 </div>
    

    写在指令中的值会被视作表达式,如 javascript 表达式,因此 v-bind:class 也接受三目运算:

    <div :class="classA ? 'class-a' : 'class-b' "> Demo3 </div>
    
    // 渲染后的HTML:
    <div class="class-a"> Demo3 </div>
    
  3. v-bind:class 支持对象,对象改变时会动态更新 class

    <div :class="{ 'class-a': isA, 'class-b': isB}"> Demo4 </div>
    
    // Javascript代码:
    <script>
    data: {
      isA: false,  // 当isA改变时,将更新class
      isB: true    // 当isB改变时,将更新class
    }
    </script>
    
    // 渲染后的HTML:
    <div class="class-b"> Demo4 </div>
    
    <div :class="objectClass"> Demo5 </div>
    
    // Javascript代码:
    <script>
    data: {
      objectClass: {
        class-a: true,
        class-b: false
      }
    }
    </script>
    
    // 渲染后的HTML:
    <div class="class-a"> Demo5 </div>
    
  4. v-bind:class 支持数组,数组里的变量改变时,会动态更新 class 列表

    <div :class="[classA, classB]"> Demo6 </div>
    
    // Javascript代码:
    <script>
    data: {
      classA: 'class-a',
      classB: 'class-b'
    }
    </script>
    
    // 渲染后的HTML:
    <div class="class-a class-b"> Demo6 </div>
    
    

    数组中可以包含 object 类型,数组中的 object 对象改变,也会更新 class 列表:

    <div :class="[classA, classB]"> Demo7 </div>
    
    // Javascript代码:
    <script>
    data: {
      classA: 'class-a',
      objectClass: {
        classB: 'class-b',  // classB 的值为class-b, 则将classB的值添加到class列表
        classC: false,    // classC值为false,将不添加classC
        classD: true    // classD 值为true,classC将被直接添加到class列表
      }
    }
    </script>
    
    // 渲染后的HTML:
    <div class="class-a class-b classD"> Demo7 </div>
    

四、总结

以上内容就是在 Vue 中如何动态绑定 Class 的方法。

希望以上内容可以帮助到大家。有任何问题欢迎讨论留言,最后不要忘记一键三连哦~。

各位 加油!

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Vue动态绑定v-model,有几种方法可以实现。其中一种方法是使用一个数组来存储动态生成的input的值,并使用v-model绑定到数组的每个元素上。 首先,创建一个空的数组,比如selectVal: []。然后,使用v-model绑定到每个input上,如v-model="selectVal[index].value"。接下来,使用循环或其他方式动态生成需要绑定v-model的input的数量,比如使用for循环生成10个input。 示例代码如下: ``` data() { return { selectVal: [] // 创建一个空的数组 } }, mounted() { var len = 10; for (var i = 0; i < len; i++) { var item = { value: '' }; // 创建一个对象,用来存储input的值 this.selectVal.push(item); // 将对象添加到数组中 } } ``` 在上述代码中,通过循环生成了10个需要绑定v-model的input,将每个input的值存储在selectVal数组中的对应元素的value属性中。 通过这种方式,可以实现动态绑定v-model,并且根据接口返回的数据动态生成相应数量的input。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [在 vue.js动态绑定 v-model](https://blog.csdn.net/qq_30944053/article/details/88634779)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [vue v-model动态生成详解](https://download.csdn.net/download/weixin_38696336/14904156)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值