Vue3你真的熟悉吗?05-style动态绑定CSS-v-bind()

1,773 阅读3分钟

原题链接

题目:

题目

看到这个题大致的意思是 vue 的 style 模块支持给 css 绑定动态值。那么是什么意思呢?让我们一起来看一下有什么操作可以达到我们的目的。

Snipaste_2024-01-22_23-02-57.png

青铜操作:

有些同学一看这个题,哦这不就是p标签的这个hello,要随着这个theme变量的值改变而改变颜色么,就跟我在公司做业务的时候,后端boy们给切图仔传某个状态status过来的时候,我要根据这个字段去改变这个文字的颜色,这还不简单?安排。

Snipaste_2024-01-22_23-06-32.png

分析:

style动态绑定

来到 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>

Snipaste_2024-01-22_23-15-39.png

王者操作:

细心的同学去vue官网一看,好家伙原来还有v-bind这么方便的语法糖啊,这可不得了,赶紧喊大家伙们一起来看看怎么回事。 Snipaste_2024-01-22_23-21-16.png

分析:

CSS 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属性值,我们是不是也不用正面跟他刚了,主打一个手拿把掐。 Snipaste_2024-01-22_23-25-53.png

最后:

好了那么,就到此为止吧。

我是Xwenhaha,一个不想只当切图仔的切图仔罢了。

如果对该系列感兴趣,可以移步专栏Vue3你真的熟悉吗