vue class和style的动态绑定举例

vue class和style的动态绑定举例

概述

此文章依据官网进行自我整理总结,便于工作中进行直接代码复用。

class的绑定

对象语法

可以用于通过变量来控制class添加与否
<div :class="{active: isActive,‘bigFz’:isBigFz}">
isActive 为true时添加

数组语法

可以用于添加多个动态class,也可以通过三目来控制某个class,实际中使用对象形式
<div :class="[{active: isActive,bigFz:isBigFz},‘bold’]">

style的绑定

对象语法

可以同时添加多个属性进行控制,可以添加动态数字变量
<div :style="{ color: activeColor, fontSize: fontSize + ‘px’ }">
<div :style="{transform:‘rotate(’+rotate+‘deg)’}">
注:此处对象不支持es6 ${} 语法,只能字符拼接,可以在计算属性中使用es6的拼接语法,可参考后面数组语法示例

数组语法

可以同时添加多个属性组进行控制,
其实就是把多个对象属性放到一起

<div :style="[styleObject,styleObject2,styleObject3]">
styleObject(){
    return `transform:rotate(${this.rotate}deg)`
},
styleObject2(){
    return `transform:rotate(${this.rotate}deg)`
}
styleObject3(){
    return `transform:rotate(${this.rotate}deg)`
}

完整demo

<template>
<div class="style">
    <h1>vue动态绑定style和class举例</h1>
    <h2>class</h2>
    <div class="card">
        <h3>对象语法:属性控制class添加,可以控制多个</h3>
        <p class='title'>用途说明:可以用于通过变量来控制class添加和去除</p>
        <code>&lt;div :class="{active: isActive,'bigFz':isBigFz}"></code>
        <p class='title'>用法优化:也可以把对象单独提炼出来,写到计算属性里,不必写到行内</p>
        <code>&lt;:class="classObject"></code>
        <div :class="{active: isActive,'bigFz':isBigFz}">
            <span @click="isActive=!isActive" class="hand">【点击切换颜色】</span>
            <span @click="isBigFz=!isBigFz" class="hand">【点击切换字体大小】</span>
        </div>
        <div :class="classObject">
            <span @click="isActive=!isActive" class="hand">【点击切换颜色】</span>
            <span @click="isBigFz=!isBigFz" class="hand">【点击切换字体大小】</span>
        </div>
    </div>
    <div class="card">
        <h3>数组语法:可以添加多个</h3>
        <p class='title'>用途说明:可以用于添加多个动态class,也可以通过三目来控制某个class,</p>
        <code>&lt;div :class="[isActive?'active':'' ,isBigFz?'bigFz':'']"></code>
        <p class='title'>三目比较繁琐时,可以使用数组套对象的方式</p>
        <code>&lt;div :class="[{active: isActive,'bigFz':isBigFz},'bold']"></code>
        <div :class="[isActive?'active':'' ,isBigFz?'bigFz':'']">
            <span @click="isActive=!isActive" class="hand">【点击切换颜色】</span>
            <span @click="isBigFz=!isBigFz" class="hand">【点击切换字体大小】</span>
        </div>
        <div :class="[{active: isActive,'bigFz':isBigFz},'bold']">
            <span @click="isActive=!isActive" class="hand">【点击切换颜色】</span>
            <span @click="isBigFz=!isBigFz" class="hand">【点击切换字体大小】</span>
        </div>
    </div>
    <hr>
    <h2>style</h2>
    <div class="card">
        <h3>对象语法:可以同时添加多个属性进行控制,可以添加动态数字变量</h3>
        <code>&lt;div :style="{ color: activeColor, fontSize: fontSize + 'px' }"></code>
        <p class="title">旋转属性的写法一:行内写法</p>
        <p><code>&lt;div :style="{transform:'rotate('+rotate+'deg)'}"></code></p>
        <p class="title">旋转属性的写法二:使用对象变量+计算属性</p>
        <code>
            <p>&lt;div :style="styleObject"></p>
                styleObject(){
                    return `transform:rotate(${this.rotate}deg)`
                }
        </code>
        <div :style="{ color: activeColor, fontSize: fontSize + 'px' }">
            <input type="number" v-model='fontSize' style="width:100px">
            这里是显示文字
        </div>
        <div>
            输入不同角度进行旋转
            <input type="number" v-model='rotate' style="width:100px" step="5">
            <p :style="styleObject" style="border:1px solid #f00;width:100px;height:40px"></p>
        </div>
        <!-- <div :style="{transform:'rotate('+rotate+'deg)'}" style="border:1px solid #f00;width:350px">
            <input type="number" v-model='rotate' style="width:100px" step="5">
            输入不同角度进行旋转进行旋转
        </div> -->
        <h3>数组语法:可以同时添加多个属性组进行控制</h3>
        <p>用法说明:其实就是把多个对象属性放到一起</p>
         <code>
            <p>&lt;div :style="[styleObject,styleObject2,styleObject3]"></p>
                <p>styleObject(){
                    return `transform:rotate(${this.rotate}deg)`
                },</p>
                <p>styleObject2(){
                    return `transform:rotate(${this.rotate}deg)`
                }</p>
                <p>styleObject3(){
                    return `transform:rotate(${this.rotate}deg)`
                }</p>
        </code>
    </div>
</div>
</template>

<script>
export default {
    computed: {
        classObject: function () {
            return {
                active: this.isActive ,
                bigFz: this.bigFz,
            }
        },
        styleObject(){
            return `transform:rotate(${this.rotate}deg)`
        }
    },
    data() {
        return {
            isActive: false,
            isBigFz: false,
            objClass: {
                active: this.isActive,
                'bigFz': this.bigFz
            },
            activeColor: 'red',
            fontSize: 20,
            rotate:10
        }
    },
}
</script>

<style lang="scss" scoped>
.style {
    padding: 50px;
    margin-bottom: 200px;
    .title{
        font-weight: bold;
        color:#e37474;
    }

    .active {
        font-weight: bold;
        color: #f00;
    }

    .bigFz {
        font-size: 20px;
    }
    .bold{
        font-weight: bold;
    }
}

.hand {
    cursor: pointer
}

.card {
    border: 1px solid #ddd;
    border-radius: 5px;
    padding: 10px
}
</style>

官网链接

vue绑定class和style

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue中,可以使用双大括号{{}}来动态值。通过在{{}}中引用变量、表达式或方法的返回值,可以实现动态更新数据的效果。 在Vue的模板中,可以使用v-bind指令来进行动态。对于class属性的,可以使用v-bind:class来实现。语法为:class="className"。其中,className可以是一个变量、一个表达式或一个方法的返回值。 举例来说,如果想要根据isActive变量动态一个class为active的属性,可以这样写:class="{ active: isActive }"。在这个例子中,isActive为true时,class为active,否则不。 另外,还可以使用数组的方式来动态多个class属性。通过在v-bind:class中使用数组,可以依次解析成对应的class。例如:class="['active', 'line']",会同时一个名为active和line的class属性。 值得注意的是,当使用v-bind:class一个变量时,如果不加单引号,会被当成一个变量。因此,需要加上单引号或双引号将其视为字符串。例如:class="[active, line]"可以改为:class="['active', 'line']"以确保被正确解析为字符串。 总结起来,Vue中可以通过v-bind:class动态class属性,可以使用对象或数组的方式进行,可以根据变量、表达式或方法的返回值来实现动态更新。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Vue动态](https://blog.csdn.net/m0_71345904/article/details/126032870)[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动态class样式](https://blog.csdn.net/weixin_45112114/article/details/127406395)[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 ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值