vue组件的实现
Vue 组件的实现
Vue 组件的实现通常分为单文件组件(SFC)和全局/局部注册组件两种方式。以下是具体实现方法:
单文件组件(.vue 文件)
单文件组件是 Vue 中最常见的组件形式,包含模板、脚本和样式三部分:
<template>
<div class="example">
{{ message }}
</div>
</template>
<script>
export default {
data() {
return {
message: 'Hello Vue!'
}
}
}
</script>
<style scoped>
.example {
color: red;
}
</style>
全局注册组件
全局注册的组件可以在任何地方使用:
// 全局注册
Vue.component('my-component', {
template: '<div>A custom component!</div>'
})
new Vue({
el: '#app'
})
局部注册组件
局部注册的组件只能在当前 Vue 实例中使用:
const ComponentA = {
template: '<div>Component A</div>'
}
new Vue({
el: '#app',
components: {
'component-a': ComponentA
}
})
组件通信
父子组件通信可以通过 props 和 events 实现:
<!-- 父组件 -->
<template>
<child-component :message="parentMessage" @update="handleUpdate"/>
</template>
<script>
export default {
data() {
return {
parentMessage: 'Message from parent'
}
},
methods: {
handleUpdate(newValue) {
console.log(newValue)
}
}
}
</script>
<!-- 子组件 -->
<template>
<div @click="$emit('update', 'New value')">
{{ message }}
</div>
</template>
<script>
export default {
props: ['message']
}
</script>
动态组件
使用 <component> 标签配合 is 特性可以实现动态组件:
<template>
<component :is="currentComponent"/>
</template>
<script>
export default {
data() {
return {
currentComponent: 'ComponentA'
}
}
}
</script>
函数式组件
对于无状态组件,可以使用函数式组件提高性能:
Vue.component('functional-button', {
functional: true,
render(createElement, context) {
return createElement('button', context.data, context.children)
}
})
高级组件模式
- 插槽:使用
<slot>实现内容分发 - 作用域插槽:允许子组件向插槽传递数据
- provide/inject:跨层级组件通信
- 混入:复用组件选项
- 自定义指令:扩展模板功能
Vue 3 的组合式 API 提供了更灵活的组件组织方式:

<script setup>
import { ref } from 'vue'
const count = ref(0)
</script>
<template>
<button @click="count++">
{{ count }}
</button>
</template>
组件实现时应遵循单一职责原则,保持组件小而专注,通过组合构建复杂界面。






