跳到主要内容

单文件组件

Single-File Component.

将 vue 组件的模板(template), 逻辑(script), 样式(style)封装在单个文件中.

<script setup>
</script>

<template>
</template>

<style>
</style>

为什么要使用单文件组件呢?

要知道怎么使用单文件组件,首先得知道什么是单文件组件.

官网是这样说的:

Vue 的单文件组件 (即 *.vue 文件,英文 Single-File Component,简称 SFC) 是一种特殊的文件格式,使我们能够将一个 Vue 组件的模板、逻辑与样式封装在单个文件中。

简单理解就是 .vue 文件. 在这个文件中可以同时包含 html,js/ts,css 代码.

单文件组件的优点有:

  • 使用熟悉的 HTML、CSS 和 JavaScript 语法编写模块化的组件
  • 让本来就强相关的关注点自然内聚
  • 预编译模板,避免运行时的编译开销
  • 组件作用域的 CSS
  • 在使用组合式 API 时语法更简单
  • 通过交叉分析模板和逻辑代码能进行更多编译时优化
  • 更好的 IDE 支持,提供自动补全和对模板中表达式的类型检查
  • 开箱即用的模块热更新 (HMR) 支持

每个 .vue 文件最多一个 <template>, <script>, <script scope> 标签. 可以有多个 <style> 标签.

注意: <script><script scope> 标签可以同时存在.

组件作用域的 CSS

<style> 标签有 scopemodule 属性.

当使用 <style scope> 标签的时候, 表示它只会影响当前组件的元素. 父组件的样式将不会渗透到子组件中.

但是子组件的根节点会同时被父组件和子组件的作用域样式影响.

如何需要在父组件里控制子组件的样式呢?

可以使用 :deep() 这个伪类.

<style scope>
.a :deep(.b) {
/* ... */
}
</style>

上面的代码会被编译成

.a[data-v-f3f3eg9] .b {
/* ... */
}

这样就实现了在父组件中控制子组件的样式.

<style scope> 的原理是什么?

scoped 样式穿透方法有哪些?

<style module> 是什么?

Scirpt 相关

script setup 的优势是什么?

SFC 中如何使用多个 script 标签?

SFC 是如何被编译的?

Vue SFC 支持哪些预处理器?

SFC 如何定义自定义块

script setup 如何自定义组件名?

SFC 的 css 变量绑定(v-bind in CSS)

如何优化 SFC 的性能

SFC 的 Tree-shaking 如何工作?

热重载(HMR)支持