Vue根据变量给页面元素动态更换class样式

需求描述:我需要根据父组件传来的一个变量,根据变量值的不同然后给子组件某元素添加不同的样式

1、起初思路

通过监听父组件传过来的变量值发生变化然后,根据值使用 js 的语法直接拿到给页面元素添加不同的class样式;
页面元素:

<div class="el-carousel-Banner"   :visible="isShow" 
	@update:visible="val => $emit('update:visible', val)">
</div>

js:

props: {
        bannerPosition:String
    },
watch: {
        bannerPosition: function(newVal){
            let div = document.getElementsByClassName("el-carousel-Banner")[0];	//拿到页面元素对象
            //现在 div 就是我需要添加 class 样式的元素了
            //下面根据值 动态添加 class 样式
            if(newVal == 'LEFT_DOWN'){
        		div.setAttribute("className", "Banner_LEFT_DOWN");   //加 class 样式
        	}else if(newVal == 'RIGHT_DOWN'){
        		div.setAttribute("className", "Banner_RIGHT_DOWN");   //加 class 样式
			}
    }

css:

.Banner_LEFT_DOWN{
    position: absolute;
    bottom: 10%;
    left: 20%;
}
.Banner_RIGHT_DOWN{
    position: absolute;
    bottom: 10%;
    right: 20%;
}
问题

1、不知道为什么我监听不到 bannerPosition 值的变化,但是其他从父组件传来的值却可以监听到;
2、我使用那个 js 给元素加 class 样式也加不上去;
两个问题还未解决,不知道是什么问题,大佬看见指点一下

最后方案

直接通过 多重 三目运算符 动态加载 class 样式
页面元素:

<div class="el-carousel-Banner"  
    :class="(bannerPosition == 'LEFT_DOWN') ? 'Banner_LEFT_DOWN':  (bannerPosition == 'RIGHT_DOWN') ? 'Banner_RIGHT_DOWN' : ' '" 
    :visible="isShow" @update:visible="val => $emit('update:visible', val)">
</div>

js:

props: {
        bannerPosition:String
    },

css:

.Banner_LEFT_DOWN{
    position: absolute;
    bottom: 10%;
    left: 20%;
}
.Banner_RIGHT_DOWN{
    position: absolute;
    bottom: 10%;
    right: 20%;
}

条条大路通罗马,罗马路上Bug多

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

#老程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值