You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VueJS如何在style标签中使用data()定义的响应式数据?

解决方案

核心原因

<style> 标签内的内容为纯静态CSS,运行时无法直接访问Vue组件实例的data属性,因此直接写this、双花括号等写法都不会被识别解析。

通用兼容方案(支持Vue2/Vue3)

通过CSS自定义变量注入实现,支持伪类、媒体查询等所有原生CSS语法,适配性最强:

  • 第一步:在目标元素的父节点上通过行内样式绑定,注入动态CSS变量
  • 第二步:在<style>中通过var()函数调用对应的变量即可

示例代码:

<template>
 <!-- 注入自定义CSS变量 -->
 <ul class="striped" :style="{'--odd-li-bg': colors[0].backgroundcolor}">
     <li>foo</li>
     <li>bar</li>
     <li>foobar</li>
 </ul>
</template>

<style>
 ul.striped > li:nth-of-type(odd) {
    /* 调用注入的CSS变量 */
    background-color: var(--odd-li-bg);
}
</style>

<script>
export default {
  data() {
    return {
        colors: [{'backgroundcolor':'#def'}]
    }
  }
}
</script>

Vue3专属简化方案

Vue3原生支持在<style>中直接通过v-bind()绑定组件实例的响应式属性,无需手动注入CSS变量:

<template>
 <ul class="striped">
     <li>foo</li>
     <li>bar</li>
     <li>foobar</li>
 </ul>
</template>

<style>
 ul.striped > li:nth-of-type(odd) {
    /* 直接绑定data属性,属性路径需用引号包裹 */
    background-color: v-bind('colors[0].backgroundcolor');
}
</style>

<script>
export default {
  data() {
    return {
        colors: [{'backgroundcolor':'#def'}]
    }
  }
}
</script>

内容的提问来源于stack exchange,提问作者Dominic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 17:24:03