目录

  • 1 初识Vue.js
    • 1.1 Vue简介
    • 1.2 Vue开发环境
    • 1.3 Vue的初使用
  • 2 Vue.js 开发基础
    • 2.1 单文件组件
    • 2.2 数据绑定
    • 2.3 指令
    • 2.4 事件对象和事件修饰符
    • 2.5 计算属性和侦听器
    • 2.6 样式绑定
    • 2.7 案例:购物车模块
    • 2.8 案例:学习计划表
  • 3 组件基础(上)
    • 3.1 构建工具Vite
    • 3.2 选项式API和组合式API
    • 3.3 组合式编程
    • 3.4 生命周期
    • 3.5 组件的注册与引用
    • 3.6 组件通信
      • 3.6.1 父组件向子组件传递数据
      • 3.6.2 子组件向父组件传递数据
      • 3.6.3 跨级组件之间的数据传递
    • 3.7 案例:待办事项
  • 4 组件基础(下)
    • 4.1 动态组件
    • 4.2 插槽
    • 4.3 自定义指令
    • 4.4 引用静态资源
    • 4.5 案例:商品管理
  • 5 网络请求
    • 5.1 Axios
    • 5.2 Axios图书列表案例
  • 6 状态管理
    • 6.1 Vuex
    • 6.2 Pinia
  • 7 路由
    • 7.1 初识路由和VueRouter
    • 7.2 嵌套路由
    • 7.3 路由重定向
    • 7.4 动态路由
    • 7.5 命名路由
    • 7.6 编程式导航
    • 7.7 导航守卫
    • 7.8 案例:后台管理系统
  • 8 常用UI组件库
    • 8.1 Element Plus组件库
    • 8.2 Vant组件库
    • 8.3 Ant Design Vue组件库
  • 9 项目实战
    • 9.1 项目所需软件
    • 9.2 项目前台分析
    • 9.3 “微商城”后台分析
样式绑定
  • 1 绑定class属性
  • 2 绑定style属性
  • 3 案例:导航项的选...

在Vue中,通过更改元素的class属性可以更改元素的样式,而对class属性的操作可以通过v-bind来实现。

使用v-bind绑定class属性时,可以将class属性值绑定为字符串、对象或数组,下面分别进行讲解。

1. 将class属性值绑定为字符串

在Vue中,可以将class属性值绑定为字符串,示例代码如下。

<template>
 <div v-bind:class="className"></div>
</template>
<script setup>
const className = 'box'
</script>


当上述代码运行后,div元素的渲染结果如下。

<div class="box"></div>


演示如何为class属性绑定字符串

<template>
 <div v-bind:class="className">梦想</div>
</template>
<script setup>
const className = 'box'
</script>
<style>
.box {
 border: 1px solid black;
}
</style>

2. 将class属性值绑定为数组

在Vue中,v-bind指令中的class属性值除了字符串和对象外,还可以是一个数组,用以动态地切换HTML的class属性,数组中的每个元素为要绑定的类名。

将class属性值绑定为数组的示例代码如下。

<template>
 <div v-bind:class="[className1, className2]"></div>
</template>
<script setup>
import { ref } from 'vue'
const className1 = ref('active')
const className2 = ref('error')
</script>


运行上述代码后,div元素的渲染结果如下。

<div class="active error"></div>


如果想有条件地切换列表中的class,可以使用三元表达式,示例代码如下。

<div v-bind:class="[isActive ? className1 : className2]"></div>


当class有多个条件时,在数组语法中也可以使用对象语法,示例代码如下。

<div v-bind:class="[{ active: isActive }, className2]"></div>


演示如何为class属性绑定数组

<template>
 <div v-bind:class="[activeClass, borderClass]"></div>
 <div v-bind:class="[isActive ? activeClass : '', borderClass]"></div>
 <div v-bind:class="[{ active: isActive }, borderClass]"></div>
</template>
<script setup>
import { ref } from 'vue'
const isActive = ref(true)
const activeClass = ref('active')
const borderClass = ref('border')
</script>
<style>
.active {
 width: 100px;
 height: 10px;
 margin-bottom: 2px;
 background-color: rgb(59, 192, 241);
}
.border {
 border: 2px solid rgb(0, 0, 0);
}
</style>



3. 将class属性值绑定为对象

在Vue中,可以将class属性值绑定为对象,从而动态地改变class属性值。对象中包含的属性名表示类名,属性值为布尔类型,如果属性值为true,表示类名生效,否则类名不生效。将class属性值绑定为对象的示例代码如下。

<template>
 <div v-bind:class="{ className: isActive }"></div>
</template>
<script setup>
import { ref } from 'vue'
const isActive = ref(true)
</script>


运行上述代码后,div元素的渲染结果如下。

<div class="className"></div>


使用v-bind绑定的class属性可以与普通的class属性共存,示例代码如下。

<div class="className1" v-bind:class="{ className2: isActive }"></div>


在上述代码中,当isActive为true时,div元素的渲染结果如下。

<div class="className1 className2"></div>


在使用v-bind绑定class属性时,如果不想将对象类型的class属性值直接写在模板中,可以将属性值定义成一个响应式对象或一个返回对象的计算属性,示例代码如下。

<template>
 <div v-bind:class="classObject1"></div>
 <div v-bind:class="classObject2"></div>
</template>
<script setup>
import { reactive, ref, computed } from 'vue'
const classObject1 = reactive({ className: true })
const isActive = ref(true)
const classObject2 = computed(() => ({
 className: isActive.value
}))
</script>


演示如何为class属性绑定对象

<template>
 <div class="text" v-bind:class="{ box: isBox, border: isBorder }">
   <div v-bind:class="{ inner: isInner }">春夏</div>
   <div v-bind:class="classObject">秋冬</div>
   <div v-bind:class="classMeal">三餐四季~</div>
 </div>
</template>
<script setup>
import { ref, reactive, computed } from 'vue'
const isBox = ref(true)
const isBorder = ref(true)
const isInner = ref(true)
const isMeal = ref(true)
const classObject = reactive({ inner: true })
const classMeal = computed(() => ({
 meal: isMeal.value
}))
</script>
<style>
.text {
 text-align: center;
 line-height: 30px;
}
.box {
 width: 100%;
 background: linear-gradient(white, rgb(239, 250, 86));
}
.border {  border: 2px dotted black; }