vue实现组件
Vue 实现组件的方法
Vue 中实现组件可以通过多种方式,包括全局注册、局部注册、单文件组件(SFC)等。以下是常见的实现方法。
全局注册组件
全局注册的组件可以在任何 Vue 实例或组件中使用。通过 Vue.component() 方法注册:
Vue.component('my-component', {
template: '<div>这是一个全局组件</div>'
});
new Vue({
el: '#app'
});
局部注册组件
局部注册的组件仅在当前 Vue 实例或组件中可用:
const MyComponent = {
template: '<div>这是一个局部组件</div>'
};
new Vue({
el: '#app',
components: {
'my-component': MyComponent
}
});
单文件组件(SFC)
单文件组件(.vue 文件)是 Vue 推荐的方式,结合了模板、逻辑和样式:
<template>
<div>{{ message }}</div>
</template>
<script>
export default {
data() {
return {
message: '这是一个单文件组件'
};
}
};
</script>
<style scoped>
div {
color: blue;
}
</style>
动态组件
通过 <component> 标签和 is 属性实现动态切换组件:
<template>
<component :is="currentComponent"></component>
</template>
<script>
import ComponentA from './ComponentA.vue';
import ComponentB from './ComponentB.vue';
export default {
data() {
return {
currentComponent: 'ComponentA'
};
},
components: {
ComponentA,
ComponentB
}
};
</script>
函数式组件
函数式组件是无状态、无实例的高性能组件,适用于纯渲染场景:
Vue.component('functional-component', {
functional: true,
props: ['message'],
render(createElement, context) {
return createElement('div', context.props.message);
}
});
组件通信
父子组件通过 props 和 $emit 通信:
<!-- 父组件 -->
<template>
<child-component :message="parentMessage" @update="handleUpdate"></child-component>
</template>
<script>
import ChildComponent from './ChildComponent.vue';
export default {
components: { ChildComponent },
data() {
return {
parentMessage: 'Hello from parent'
};
},
methods: {
handleUpdate(newMessage) {
this.parentMessage = newMessage;
}
}
};
</script>
<!-- 子组件 -->
<template>
<div>
<p>{{ message }}</p>
<button @click="$emit('update', 'New message')">Update</button>
</div>
</template>
<script>
export default {
props: ['message']
};
</script>
插槽(Slots)
通过插槽实现内容分发:
<!-- 父组件 -->
<template>
<child-component>
<p>Default slot content</p>
<template v-slot:footer>
<p>Footer content</p>
</template>
</child-component>
</template>
<!-- 子组件 -->
<template>
<div>
<slot></slot>
<slot name="footer"></slot>
</div>
</template>
组件生命周期
Vue 组件有多个生命周期钩子,可以在不同阶段执行逻辑:
export default {
created() {
console.log('组件创建完成');
},
mounted() {
console.log('组件挂载到 DOM');
},
updated() {
console.log('组件更新');
},
destroyed() {
console.log('组件销毁');
}
};
通过以上方法,可以灵活实现 Vue 组件的开发与复用。







