Class与Style绑定

本文详细介绍了Vue.js中如何使用v-bind指令进行数据绑定,特别关注于动态操作元素的class列表和内联样式。通过对象语法和数组语法,可以轻松实现条件性的class切换和样式应用,同时展示了计算属性的高级用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  对于数据绑定,一个常见的需求是操作元素的class列表和它的内联样式。因为它们都是attribute,我们可以用v-bind处理它们:只需要计算出表达式最终的字符串。不过,字符串拼接麻烦又易错。因此,在v-bind用于class和style时,Vue.js专门增强了它。表达式的结果类型除了字符串以外,还可以是对象或数组。

一、绑定HTML Class

  1.对象语法

  我们可以传给v-bind:class一个对象,以动态地切换class。注意,v-bind:class指令可以与普通的class特性共存。代码示例如下:

<div id="example" class="static" v-bind:class="{'didi-orange':isRipe,'didi-green':isNotRipe}"></div>

var vm = new Vue({
   el:'example',
   data:{
      isRipe:true,
      isNotRipe:false              
    }  
})

  渲染为:

<div id='example' class='static didi-orange'></div>

  当isRipe和isNotRipe变化时,class列表将相应地更新。例如,如果isNotRipe变为true,那么class列表将变为"static didi-orange didi-green"。(当然,一般情况下,v-bind:class绑定的对象中只有一个class会生效,这取决于用户自己的设置。)

  注:尽管可以用Mustache标签绑定class,比如class="{{className}}",但是我们不推荐这种写法和v-bind:class混用。

  我们也可以直接绑定数据中的一个对象,代码示例如下:

<div id="example" v-bind:class="ddfe"></div>
var vm = new Vue({
   el:'example', 
   data:{
       ddfe:{
           'didi-orange':'true',
            'didi-green':'false'      
        }    
     } 
})    

  还可以在这里绑定一个返回对象的计算属性。这是一种常用且强大的模式。代码示例如下:

<div id='example' v-bind:class="ddfe"></div>
var vm = new Vue({
   el:'example',
   data:{
         didiAge:4,
         didiMember:6000     
     }
      computed:{
          ddfe:function(){
              return{
                'didi-orange':this.didiAge>3 ? true:false,
                 'didi-large':this,didiMember>1000? true:false
            } 
        } 
    }
})        

  2.数组语法

  我们可以把一个数组传给v-bind:class,以应用一个class列表。代码示例如下:

<div id='example' v-bind:class="[didiHandsome,didiBeautiful]"></div>
var vm = new Vue({
   el:'example',
   data:{
       didiHandsome:'didi-handsome',
       didiBeautiful:'didi-beautiful'          
    }  
})

  渲染为:

<div id="example" class="didi-handsome didi-beautiful"></div>

  如何想根据条件切换列表中的class,则可以用三元表达式。代码示例如下:

<div id="example" v-bind:class="[didiHandsome,isRipe ? didiOrange: '']"></div>

  此例始终添加didiHandsome,但是只有在isRipe为true时才会添加didiOrange。

  不过,当有多个条件class时这样写有些烦琐。在Vue.js 1.0.19及以后版本中,可以在数组语法中使用对象语法。代码示例如下:

<div id="example" v-bind:class="[didiHandsome,{didiOrange: isRipe,didiGreen: isNotRipe}]"></div>

二、绑定内联样式

  1.对象语法

  v-bind:style的对象语法十分直观----看着非常像CSS,其实它是一个JavaScript对象。CSS属性名可以用驼峰式或短横分隔命名。代码示例如下:

<div id="example" v-bind:style="{color:didiColor,fontSize:fontSize + 'px'}"></div>
var vm = new Vue({
   el:'example',
   data:{
       didiColor:'orange',
       fontSize:30  
    }  
})

  通常直接绑定到一个样式对象更好,让模板更清晰。代码示例如下:

<div id="example" v-bind:style="ddfe"></div>
var vm = new Vue({
   el:'example', 
   data:{
        ddfe:{
            color:orange,
            fontSize:'13px'
        }
    } 
})    

  同样的,对象语法常常结合返回对象的计算属性使用。

  2.数组语法

  v-bind:style的数组语法可以将多个样式对象应用到一个元素上。代码示例如下:

<div v-bind:style="[ddfe,didiFamily]"></div>

  3.自动添加前缀

  当v-bind:style使用需要厂商前缀的CSS属性时,如transform,Vue.js会自动侦测并添加相应的前缀。在Vue.js源码中采用prefix函数来完成这个功能。

 

转载于:https://www.cnblogs.com/yc-1314/p/10266776.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值