Я создаю nuxt-приложение для использования wp rest API. В моем методе выборки я выбираю информацию о необходимых компонентах. Я не могу понять, как затем импортировать все компоненты и визуализировать их. Я пробовал несколько методов, но не вижу, как это работает.
Вот что работает:
<component :is="test" :config="componentList[0]"></component><br>
export default {
async fetch({ store, $axios }) {
await store.dispatch("getPageBySlug", "home");
},
computed: {
test() {
return () => import('~/components/HeroIntro');
}
}
};
Хорошо, это легко, ничего особенного - теперь я могу импортировать компонент на основе слага и т. Д. Но мне нужно отрендерить несколько компонентов, и поэтому я делаю это:
<component
v-for="component in componentList"
:key="component.acf_fc_layout"
:is="component.acf_fc_layout"
:config="component">
</component>
вместе с этим
export default {
async fetch({ store, $axios }) {
await store.dispatch("getPageBySlug", "home");
},
computed: {
page() {
return this.$store.getters.getPageBySlug("home");
},
componentList() {
return this.page.acf.flexible_content;
},
componentsToImport() {
for(const component of this.componentList) {
() => import('~/components' + component.acf_fc_layout);
}
}
}
};
Все, что я получаю, это
Неизвестный пользовательский элемент: HeroIntro - вы зарегистрировали
компонент правильно? Для рекурсивных компонентов убедитесь, что
опция "имя"
Как мне архивировать то, что я пытаюсь?
редактирование:
Итак, после долгих попыток я мог заставить его работать только с использованием дополнительного компонента, «DynamicComponent»:
<template>
<component :is="componentFile" :config="config"></component>
</template>
<script>
export default{
name: 'DynamicComponent',
props: {
componentName: String,
config: Object
},
computed: {
componentFile() {
return () => import(`~/components/${this.componentName}.vue`);
}
}
}
</script>
Сейчас в Index.vue
<template>
<main class="container-fluid">
<DynamicComponent
v-for="(component, index) in componentList"
:key="index"
:componentName="component.name"
:config="component"
/>
</main>
</template>
<script>
export default {
components: {
DynamicComponent: () => import("~/components/base/DynamicComponent")
}
Я пока не уверен, что это оптимально - но пока это работает отлично - любой вклад / мнения будут великолепны!