vue class 动态声明的几种方式

业务需要使用多个class,开始试错,总是渲染不正确,于是多做尝试,做个总结。

一、字符串绑定法
  1. 单个class

    :class=“url.indexOf(‘rank’) !== -1 ? ‘rank’: ‘’”

  2. 多个class

    :class=“'main-body ’ +(url.indexOf(‘rank’) !== -1? ‘rank’: ‘’)”

二、 对象绑定法
  1. 单个class

    :class="{‘rank’:url.indexOf(‘rank’) !== -1} "

  2. 多个class

    :class="{‘rank’:url.indexOf(‘rank’) !== -1, ‘main-body’:true} "

三、 数组绑定法
  1. 单个class

    :class=" [url.indexOf(‘rank’) !== -1 ? ‘rank’: ‘’]"

  2. 多个class

    :class=“[url.indexOf(‘rank’) !== -1?‘rank’:‘’, ‘main-body’]”

四、数组对象绑定法
  1. 单个class

    :class=“[{‘rank’: url.indexOf(‘rank’) !== -1}]”

  2. 多个class

    :class=“[{‘rank’: url.indexOf(‘rank’) !== -1}, ‘main-body’]”

五、 computed绑定法

上面的几种写法都可以改为computed写法,return 对应的类型就好了

  computed: {
        className: function () {
             return this.url.indexOf('rank') !== -1 ? 'rank': '';
             //return {'rank':this.url.indexOf('rank') !== -1};
             //return [this.url.indexOf('rank') !== -1 ? 'rank': ''];
             //return [{'rank': url.indexOf('rank') !== -1}];
        },
    },

参考资料
[vue动态绑定class的最常用几种方式]

### Vue 动态绑定 Class 数据变化不生效解决方案 当遇到 Vue动态绑定 `class` 随着数据变化而不更新的情况时,通常是因为组件的状态管理不当或是事件监听机制存在问题。以下是几种可能的原因及其对应的解决方案。 #### 1. 确认数据响应性 确保用于控制类名切换的数据属性是响应式的。如果这些变量是在生命周期钩子之外定义的,则它们可能是非响应性的。应当在 `data()` 函数内部声明所有需要追踪状态变更的变量[^1]: ```javascript export default { data() { return { isActive: true, // 响应式变量 }; } } ``` #### 2. 使用计算属性代替内联表达式 对于复杂的逻辑判断,建议采用计算属性而不是直接写入模板中的三元运算符或其他复杂表达式。这不仅提高了可读性和维护性,而且可以更好地利用缓存优化性能[^2]: ```javascript computed: { computedClasses() { return [ 'nav-link', { active: this.isActive } // 条件渲染样式 ]; } } ``` 此时,在模板里只需要这样调用即可: ```html <div :class="computedClasses"></div> ``` #### 3. 检查父级作用域的影响 有时候即使本地实现了正确的逻辑,但由于来自外部(比如父组件传递下来的 prop)的因素干扰也可能导致预期效果无法实现。因此还需要留意是否存在其他地方影响到了当前组件的行为模式[^3]。 另外需要注意的是,某些情况下浏览器可能会因为 CSS 缓存等原因未能及时反映最新的更改;可以通过强制刷新页面或者清除缓存来排除这类因素造成的假象问题。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

土豆片片

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

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

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

打赏作者

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

抵扣说明:

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

余额充值