VUE3中CSS如何使用后台传过来的变量?
最近在弄项目重构,里面所有的请求地址(包括网络请求地址,样式地址,背景图片地址,图片地址)都是拼接而成。具体的格式像:background-image:url($!imageWebServer/$!config.store_login_pic.path/$!config.store_login_pic.name);这样,这是在css中的引用。现在改用VUE3+ElementPlus来进行重构,现在后端提供 imageWebServer 和 config 参数,这些参数在所有css中是共用的,我该如何进行引用和拼接?
尝试代码如下,参数暂时写死报错如下
回复
1个回答

test
2024-06-27
简单的使用可以在 style
中使用用 v-bind
绑定你的JS变量👉 #CSS 中的 v-bind() - 单文件组件 CSS 功能 | Vue.js
<script setup>
import { ref } from 'vue'
const theme = ref({
color: 'red',
})
</script>
<template>
<p>hello</p>
</template>
<style scoped>
p {
color: v-bind('theme.color');
}
</style>
会在编译时期给你替换成 CSS变量 的形式在CSS样式使用。例如这样 👇
<div id="app" data-v-app="">
<p data-v-7ba5bd90="" style="--7ba5bd90-theme\.color: red;">hello</p>
</div>
<style css="">
p[data-v-7ba5bd90] {
color: var(--7ba5bd90-theme\.color);
}
</style>
所以如果你动态变更了JS中的样式变量页面中的样式也会同步变更 👇
<script setup>
import { ref } from 'vue'
const theme = ref({
color: 'red',
})
// 模拟接口请求变更样式变量
setTimeout(() => {
theme.value.color = 'green'
}, 5000)
</script>
<template>
<p>hello</p>
</template>
<style scoped>
p {
color: v-bind('theme.color');
}
</style>
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容