Appearance
组件
注册
js
// 全局注册
app.component('Blog', Blog)
// 局部注册
export default {
components: {
Blog
}
}
插槽
默认内容
html
<!-- MyBtn -->
<button class="my-btn">
<slot>默认值</slot>
</button>
<!-- 使用 -->
<MyBtn>按钮</MyBtn>
具名插槽
html
<!-- BaseLayout -->
<div class="container">
<header>
<slot name="header"></slot>
</header>
<main>
<slot></slot>
</main>
<footer>
<slot name="footer"></slot>
</footer>
</div>
<!-- 使用 -->
<BaseLayout>
<template v-slot:header></template>
<template v-slot:default></template>
<template v-slot:footer></template>
</BaseLayout>
<!-- 简写 -->
<BaseLayout>
<template #header></template>
<template #default></template>
<template #footer></template>
</BaseLayout>
注入
js
import { provide } from 'vue'
provide('count', count)
provide('blog', blog)
js
import { inject } from 'vue'
let myCount = inject('count')
let myBlog = inject('blog')
js
import { createApp } from 'vue'
let app = createApp({})
app.provide('msg', 'hello')
动态组件
html
<component :is="active"></component>
include 需要缓存的组件
exclude 不需要缓存的组件
html
<KeepAlive :include="['a', 'b']">
<component :is="view" />
</KeepAlive>
异步组件
书写规范
- 组件名使用大驼峰:提高可读性,区分原生 HTML 元素。(纯html除外,非构建版)
- 模板内 props 使用 kebab-case:和 HTML attribute 保持一致。
html
<MyBlog :is-hot="false"></MyBlog>
- 组件内 props 使用小驼峰:作为一个合法的 JavaScript 标识符。
vue
<script setup>
defineProps({
isHot: Boolean
})
</script>