Сценарий:
Я использую Nuxt в режиме universal
.Приложение работает с автономной CMS, которая обеспечивает простую компоновку компонентов, которые должны быть отображены, вместе с именами компонентов и их реквизитами - что-то вроде этого:
[
{
"tag": "div",
"class": "col",
"component": "dogs",
"props": {
"dogs": [
{
"id": 1,
"name": "Barky"
},
{
"id": 2,
"name": "Jumpy"
}
]
}
},
{
"tag": "div",
"class": "col",
"component": "cats",
"props": {
"cats": [
{
"id": 1,
"name": "Miouwy"
},
{
"id": 2,
"name": "Fluffy"
}
]
}
}
]
Как я понимаю, я должен применять компонентыв DOM до того, как Nuxt сделает «снимок» и доставит его клиенту.Мой план состоял в том, чтобы смонтировать компонентов в жизненном цикле created()
- то есть смотреть только по именам, а не по пути.
Основная проблема:
Я хочу динамически монтировать компоненты в DOM, который еще не существует.
В качестве примера того, от чего я хочу уйти - монтирование компонентов после того, как Nuxt доставил снимок -в жизненном цикле mounted()
.
<template>
<section class="container">
<div ref="layout-container" class="row"></div>
</section>
</template>
<script>
import { mapGetters } from 'vuex';
import Vue from 'vue';
import Dogs from '@/components/Dogs';
import Cats from '@/components/Cats';
export default {
components: {
Dogs,
Cats
},
fetch({ store }) {
store.dispatch('landing/updateContent');
},
computed: {
...mapGetters({
content: 'landing/content',
})
},
beforeCreate() {
Vue.component('dogs', Dogs);
Vue.component('cats', Cats);
},
mounted() {
this.content.forEach((item) => {
const CompClass = Vue.component(item.component);
const instance = new CompClass({ propsData: item.props }).$mount();
this.$refs['layout-container'].appendChild(instance.$el);
})
}
};
</script>
Большое спасибо за любые указания заранее!
РЕДАКТИРОВАТЬ: Репо с этим примером: https://github.com/jpedryc/nuxt-test-render