Vue3动态样式

  • 一. Vue3动态样式

一. Vue3动态样式

我们准备一个简单的Vue3项目,并写两个页面:Home

<template>
  <h1>Home</h1>
  <div>
    {{ number }}
    <button @click="add">1</button>
  </div>
</template>
<script setup lang="ts">
import { ref, reactive, toRef } from "vue";
const state = reactive({
  count: 1,
  color: "black",
});
const colorRef = toRef(state, "color");
const add = () => {
  state.count++;
  colorRef.value = state.count % 2 == 0 ? "blue" : "red";
};
</script>
<style scoped>
h1 {
  color: v-bind(colorRef);
}
</style>

About页面:

<template>
    <h1>About</h1>
</template>

效果如下:
Vue3动态样式

记得添加路由。添加好之后,我们点击加1按钮,看看会发生什么?
Vue3动态样式

首先来看下我们做的事情:

  1. 我们定义了几个响应式数据,其中有个colorRef,它会根据count变量是奇数还是偶数来改变颜色。
  2. 我们使用了v-bind()来讲这个响应式数据绑定在了h1标签上。

上面就包含了本文想说的几个点:

  1. 我们可以使用v-bind,方便的去将CSS样式和响应式数据进行绑定,响应式数据的值可以作为CSS样式来使用。
  2. 如果在style标签中,添加 scoped属性,代表当前这个样式的作用域仅仅在当前组件当中。我们可以看到对应的样式名称带着一定的前缀。
    Vue3动态样式

上述在style样式里面添加v-bind的写法还有第二种,就是直接将表达式赋值上去:

h1{
    color: v-bind('state.count % 2 == 0 ? "blue" : "red"');
}

但是这种方式需要注意,一定要在表达式的最外层增加引号。即你传入的整体一定是一个字符串。只不过它的内容体是一个三元表达式。

发表回复