如何允许从 Vue3 单个文件组件导出多个?
How to Allow Multiple Exports from a Vue3 Single File Component?
我正在为自定义列表制作一个 Vue3 单文件组件。在我的单文件组件中,我想导出主要的默认 Vue 组件,以及声明它是什么类型的列表的枚举:
child:
<template>
<Listbox>
<template #header>
<h5>{{listType}}</h5>
</template>
</Listbox>
</template>
<script lang="ts">
export enum PagesListType {
RecentlyCreated = 'Recently Created',
RecentlyModified = 'Recently Modified',
Starred = 'Starred'
};
export default {
props: {
listType: PagesListType
},
data() {
return {
pages: [],
PagesListType
};
},
};
</script>
枚举只在这个组件的上下文中才有意义,所以我不想把它放在其他类型的文件夹中。它仅与此列表的行为有关。但是当我尝试在 parent 组件中执行此操作时,它失败了:
parent:
<template>
<div>
<PagesList :listType="PagesListType.RecentlyCreated"></PagesList>
<PagesList :listType="PagesListType.RecentlyModified"></PagesList>
<PagesList :listType="PagesListType.Starred"></PagesList>
</div>
</template>
<script lang="ts">
import PagesList, { PagesListType } from './PagesList.vue';
export default {
//parent component details
};
</script>
当我导入命名的 PagesListType 枚举时,它只是未定义。我需要做什么才能正确导出命名枚举?谢谢!
我认为您需要将 enum
导出到一个单独的文件中,然后将其导入到不同的文件中才能使用。你把这个文件放在哪里主要取决于你,你想如何构建你的项目。
例如,src 文件夹中的 types.ts
文件可以像这样定义和导出枚举:
export enum PagesListType {
RecentlyCreated = 'Recently Created',
RecentlyModified = 'Recently Modified',
Starred = 'Starred'
}
您可以通过像这样导入它来在任何地方使用枚举:
import { PagesListType } from '@/types';
你必须使用@/ 而不是 src/。因为在 tsconfig.json 文件中可用的 TypeScript 配置中 @ 的 src 文件夹。
我可以通过不导出枚举,而是将其作为 属性 添加到导出的默认组件来使它起作用:
child:
enum PagesListType {
RecentlyCreated = 'Recently Created',
RecentlyModified = 'Recently Modified',
Starred = 'Starred'
};
export default {
props: {
listType: PagesListType
},
PagesListType,
data() {
return {
pages: [],
PagesListType
};
},
};
parent:
<template>
<div>
<PagesList :listType="created"></PagesList>
<PagesList :listType="modified"></PagesList>
<PagesList :listType="starred"></PagesList>
</div>
</template>
<script lang="ts">
import PagesList from './PagesList.vue';
export default {
computed: {
created() {
return PagesList.PagesListType.RecentlyCreated;
},
modified() {
return PagesList.PagesListType.RecentlyModified;
},
starred() {
return PagesList.PagesListType.Starred;
}
},
//other parent implementation details omitted
};
</script>
我正在为自定义列表制作一个 Vue3 单文件组件。在我的单文件组件中,我想导出主要的默认 Vue 组件,以及声明它是什么类型的列表的枚举:
child:
<template>
<Listbox>
<template #header>
<h5>{{listType}}</h5>
</template>
</Listbox>
</template>
<script lang="ts">
export enum PagesListType {
RecentlyCreated = 'Recently Created',
RecentlyModified = 'Recently Modified',
Starred = 'Starred'
};
export default {
props: {
listType: PagesListType
},
data() {
return {
pages: [],
PagesListType
};
},
};
</script>
枚举只在这个组件的上下文中才有意义,所以我不想把它放在其他类型的文件夹中。它仅与此列表的行为有关。但是当我尝试在 parent 组件中执行此操作时,它失败了:
parent:
<template>
<div>
<PagesList :listType="PagesListType.RecentlyCreated"></PagesList>
<PagesList :listType="PagesListType.RecentlyModified"></PagesList>
<PagesList :listType="PagesListType.Starred"></PagesList>
</div>
</template>
<script lang="ts">
import PagesList, { PagesListType } from './PagesList.vue';
export default {
//parent component details
};
</script>
当我导入命名的 PagesListType 枚举时,它只是未定义。我需要做什么才能正确导出命名枚举?谢谢!
我认为您需要将 enum
导出到一个单独的文件中,然后将其导入到不同的文件中才能使用。你把这个文件放在哪里主要取决于你,你想如何构建你的项目。
例如,src 文件夹中的 types.ts
文件可以像这样定义和导出枚举:
export enum PagesListType {
RecentlyCreated = 'Recently Created',
RecentlyModified = 'Recently Modified',
Starred = 'Starred'
}
您可以通过像这样导入它来在任何地方使用枚举:
import { PagesListType } from '@/types';
你必须使用@/ 而不是 src/。因为在 tsconfig.json 文件中可用的 TypeScript 配置中 @ 的 src 文件夹。
我可以通过不导出枚举,而是将其作为 属性 添加到导出的默认组件来使它起作用:
child:
enum PagesListType {
RecentlyCreated = 'Recently Created',
RecentlyModified = 'Recently Modified',
Starred = 'Starred'
};
export default {
props: {
listType: PagesListType
},
PagesListType,
data() {
return {
pages: [],
PagesListType
};
},
};
parent:
<template>
<div>
<PagesList :listType="created"></PagesList>
<PagesList :listType="modified"></PagesList>
<PagesList :listType="starred"></PagesList>
</div>
</template>
<script lang="ts">
import PagesList from './PagesList.vue';
export default {
computed: {
created() {
return PagesList.PagesListType.RecentlyCreated;
},
modified() {
return PagesList.PagesListType.RecentlyModified;
},
starred() {
return PagesList.PagesListType.Starred;
}
},
//other parent implementation details omitted
};
</script>