Vue封装组件

Vue组件创建与全局注册

1.创建组件文件

import { withInstall } from '@/utils/tool'
import FastTableProjectColumn from './src/fast-table-project-column.vue'

export default withInstall(FastTableProjectColumn)

 

// 全局组件安装
export const withInstall = <T>(component: T, alias?: string) => {
	const comp = component as any
	comp.install = (app: App) => {
		app.component(comp.name || comp.displayName, component)
		if (alias) {
			app.config.globalProperties[alias] = component
		}
	}
	return component as T & Plugin
}
<template>
	<el-table-column
		:prop="prop"
		:label="label"
		:header-align="headerAlign"
		:align="align"
		:width="width"
		:min-width="minWidth"
		:class-name="className"
	>
		<template #default="scope">
			{{ getValByProjectId(store.appStore.projectList, scope.row[props.prop]) }}
		</template>
	</el-table-column>
</template>

<script setup lang="ts" name="FastTableProjectColumn">
	
import store from '@/store'
import { getValByProjectId } from '@/utils/tool'

const props = defineProps({
	prop: {
		type: String,
		required: true
	},
	label: {
		type: String,
		required: true
	},
	headerAlign: {
		type: String,
		required: false,
		default: () => 'center'
	},
	align: {
		type: String,
		required: false,
		default: () => 'center'
	},
	width: {
		type: String,
		required: false,
		default: () => ''
	},
	minWidth: {
		type: String,
		required: false,
		default: () => ''
	},
	className: {
		type: String,
		required: false,
		default: () => ''
	}
})
</script>
// 获取字典Label
export const getDictLabel = (dictList: any[], dictType: string, dictValue: string) => {
	const type = dictList.find((element: any) => element.dictType === dictType)
	if (type) {
		const val = type.dataList.find((element: any) => element.dictValue === dictValue + '')
		if (val) {
			return val.dictLabel
		} else {
			return dictValue
		}
	} else {
		return dictValue
	}
}

2.注册全局组件

import FastTableColumn from '@/components/fast-table-column'
app.use(FastTableColumn)

Vue封装组件的具体过程如下: ### 创建组件文件 在项目中创建一个新的以 `.vue` 为后缀的组件文件。例如,创建 `MyComponent.vue` 文件,其结构通常包含 `<template>`、`<script>` 和 `<style>` 三部分。 ```vue <!-- MyComponent.vue --> <template> <div class="my-component"> <h1>{{ title }}</h1> <p>{{ content }}</p> </div> </template> <script> export default { data() { return { title: 'Hello', content: 'This is my component' } } } </script> <style scoped> .my-component { background-color: #f3f3f3; padding: 20px; } </style> ``` 此文件中,`<template>` 部分定义了组件的 HTML 结构,`<script>` 部分定义了组件的逻辑,`<style>` 部分定义了组件的样式,`scoped` 属性表示样式只作用于当前组件 [^1]。 ### 定义组件逻辑 在 `<script>` 标签内定义组件的逻辑,可包含数据、方法、生命周期钩子等。在 `MyComponent.vue` 中,通过 `data` 函数返回一个对象,对象中的属性可在模板中使用 [^1]。 ### 封装组件样式 在 `<style>` 标签内编写组件的样式,使用 `scoped` 属性可确保样式只作用于当前组件,避免样式冲突 [^1]。 ### 在其他组件中使用封装好的组件 创建另一个组件文件,如 `OtherComponent.vue`,在其中引入并使用封装好的组件。 ```vue <!-- OtherComponent.vue --> <template> <div> <my-component></my-component> </div> </template> <script> import MyComponent from '@/components/MyComponent.vue' export default { components: { MyComponent } } </script> ``` 在 `OtherComponent.vue` 中,先使用 `import` 语句引入 `MyComponent.vue`,然后在 `components` 选项中注册该组件,最后就可在模板中使用 `<my-component>` 标签来渲染该组件 [^1]。 ### 组件传参(可选) 若需要向组件传递数据,可使用 `props`。在 `MyComponent.vue` 中添加 `props`: ```vue <script> export default { props: { title: String, content: String }, data() { return { // 这里可以根据需要设置默认值 } } } </script> ``` 在 `OtherComponent.vue` 中传递参数: ```vue <template> <div> <my-component title="New Title" content="New Content"></my-component> </div> </template> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值