题目:
看到这个题大致的意思是 vue 的 style 模块支持给 css 绑定动态值。那么是什么意思呢?让我们一起来看一下有什么操作可以达到我们的目的。
青铜操作:
有些同学一看这个题,哦这不就是p标签的这个hello,要随着这个theme变量的值改变而改变颜色么,就跟我在公司做业务的时候,后端boy们给切图仔传某个状态status过来的时候,我要根据这个字段去改变这个文字的颜色,这还不简单?安排。
分析:
来到 vue 官网 类与样式绑定这里,我们可以发现有一个方式可以动态绑定这个样式的属性值,也就是在内联的 style 里面对应属性值绑定动态值。
解决:
<script setup>
import { ref } from "vue"
const theme = ref("red")
const colors = ["blue", "yellow", "red", "green"]
setInterval(() => {
theme.value = colors[Math.floor(Math.random() * 4)]
}, 1000)
</script>
<template>
<p :style="{color:theme}">hello</p>
</template>
<style scoped>
/* Modify the code to bind the dynamic color */
p {
color: red
}
</style>
那么显然这里我们解决问题的逻辑就是,直接找到这个 p 标签,在它的内联 style 里面去绑定动态属性,也就是 theme,那么问题是解决了,看起来也没毛病,但有没有想过一个问题,这里我只是要改变文字大小,假如我要改变的属性有很多,像什么文字大小啦,粗细啦,等等其他的,如果我一个个往style上面去加,那不是加炸了。
<p :style="{color:theme,fontSize:helloSize,fontWeight:helloWeight,...}">hello</p>
王者操作:
细心的同学去vue官网一看,好家伙原来还有v-bind这么方便的语法糖啊,这可不得了,赶紧喊大家伙们一起来看看怎么回事。
分析:
来到 vue 官网 API 这个分类下,单文件组件的 CSS 功能这里。CSS中的v-bind 这里有一句话,说的是单文件组件的 style 标签支持使用 v-bind CSS 函数将 CSS 的值链接到动态的组件状态。简单来讲也就是说我们在样式要绑变量的地方用 v-bind(变量名)这种方式即可完成我们的需求。
解决:
<script setup>
import { ref } from "vue"
const theme = ref("red")
const colors = ["blue", "yellow", "red", "green"]
setInterval(() => {
theme.value = colors[Math.floor(Math.random() * 4)]
}, 1000)
</script>
<template>
<p>hello</p>
</template>
<style scoped>
/* Modify the code to bind the dynamic color */
p {
color: v-bind(theme)
}
</style>
那么这里显然我们解决问题的逻辑就是,在 style 样式里头,这个 color 要使用变量,那么就用 v-bind(theme)即可绑定上这个变量,然后发现因为 setInterval 这个逻辑,变量也发生了改变,说明没问题。哪怕现在天杀的产品上来就要我们根据某个业务逻辑改变几十个css属性值,我们是不是也不用正面跟他刚了,主打一个手拿把掐。
最后:
好了那么,就到此为止吧。
我是Xwenhaha,一个不想只当切图仔的切图仔罢了。
如果对该系列感兴趣,可以移步专栏Vue3你真的熟悉吗