Я смотрел на этот квест несколько раз за последние несколько дней и пришел к выводу, что это плохая концепция, я могу только предложить следующее и только потому, что никто еще не ответил, так что здесь возможная альтернатива подумайте ...
Предполагая, что у вас есть доступ к отдельному источнику приложений, и вы действительно управляете им, я бы преобразовал их в компоненты, которые, я думаю, могут быть менее проблемными c, учитывая, что вы будете иметь все виды проблем с версионностью кэша (хэширование имени файла) и разбиением кода в отношении получения всех ресурсов, необходимых для правильной загрузки, это будет кошмар.
Отдельные приложения действительно должны были быть созданы как всеобъемлющие Dynami c компоненты с их исходным кодом каждый в своем собственном подкаталоге.
При использовании динамического c импорта с разделением кода части ваших сложных приложений будут автоматически загружаться и загружаться по мере необходимости .
В качестве компонентов плитки могли быть легко выводите только по желанию, используя итератор для вывода желаемого содержимого тайла, используя <component :is="myView"/>
.
// Register app components:
const Dynamics = {
// A component to use while the async component is loading
loading: LoadingComponent,
// A component to use if the load fails
error: ErrorComponent,
// Delay before showing the loading component. Default: 200ms.
delay: 200,
// The error component will be displayed if a timeout is
// provided and exceeded. Default: Infinity.
timeout: 3000
}
Vue.component('application-one', () => ({ ...Dynamics, component: import('@/components/applications/app-one/app.vue') }))
Vue.component('application-two', () => ({ ...Dynamics, component: import('@/components/applications/app-two/app.vue') }))
// Dashboard.vue
<template>
<div id="dashboard">
<template v-for="(app, index) of applications">
<component :is="app.name" :key="index" v-bind="app" />
</template>
</div>
</template>
<script>
export default {
name: 'dashboard',
// example only, real list would be generated from an API endpoint call?
data: () => ({
applications: [
{ name: 'application-one', width: '33%', height: '100%' },
{ name: 'application-two', width: '33%', height: '100%' },
{ name: 'application-one', width: '33%', height: '33%' },
{ name: 'application-one', width: '33%', height: '33%' },
{ name: 'application-two', width: '33%', height: '33%' },
]
})
}
</script>
Надеюсь, это даст вам основу для некоторых альтернативных подходов.