1. 组件基础
组件是Vue.js最强大的特性之一,它允许我们使用小型、独立和可复用的组件构建大型应用。
// 定义一个组件
const app = Vue.createApp({})
app.component('todo-item', {
props: ['todo'],
template: `
<li>
{{ todo.text }}
</li>
`
})
// 使用组件
<todo-item
v-for="item in groceryList"
:todo="item"
:key="item.id"
></todo-item>
2. 组件注册
Vue.js提供了两种组件注册方式:全局注册和局部注册。
// 全局注册
app.component('my-component', {
// 选项
})
// 局部注册
const ComponentA = {
// 选项
}
const app = Vue.createApp({
components: {
'component-a': ComponentA
}
})
3. Props
Props是父组件向子组件传递数据的方式。
Props示例
app.component('blog-post', {
props: ['title', 'content'],
template: `
<div class="blog-post">
<h3>{{ title }}</h3>
<p>{{ content }}</p>
</div>
`
})
4. 事件处理
子组件可以通过事件向父组件通信。
事件处理示例
app.component('button-counter', {
data() {
return {
count: 0
}
},
template: `
<button @click="count++">
点击次数: {{ count }}
</button>
`
})
5. 插槽
插槽允许我们组合组件,实现更灵活的内容分发。
插槽示例
页面标题
主要内容
页脚信息
app.component('base-layout', {
template: `
<div class="container">
<header>
<slot name="header"></slot>
</header>
<main>
<slot></slot>
</main>
<footer>
<slot name="footer"></slot>
</footer>
</div>
`
})
6. 动态组件
Vue.js允许我们动态切换组件。
动态组件示例
const Home = {
template: '<div>首页内容</div>'
}
const About = {
template: '<div>关于页面</div>'
}
const app = Vue.createApp({
data() {
return {
currentComponent: 'home'
}
},
components: {
Home,
About
}
})
7. 综合示例:待办事项列表
下面是一个使用组件构建的待办事项列表示例。
待办事项列表
总计: {{ todos.length }} 项
已完成: {{ completedCount }} 项
组件设计原则
- 单一职责:每个组件应该只负责一个功能
- 可复用性:组件应该是可复用的
- 可维护性:组件应该易于维护和测试
- 可组合性:组件应该能够组合成更复杂的组件
练习
尝试创建一个用户评论组件,包含以下功能:
- 显示评论列表
- 添加新评论
- 删除评论
- 评论点赞功能