Vue.js的动态组件模板的实现

2020-06-12 21:14:51易采站长站整理

return null
}
return () => import(`templates/${this.type}`)
},
},
mounted() {
this.loader()
.then(() => {
this.component = () => this.loader()
})
.catch(() => {
this.component = () => import('templates/default')
})
},
}
</script>

那么这里发生了什么?默认情况下,Vue.js支持动态组件。问题是您必须注册/导入要使用的所有组件。


<template>
<component :is="someComponent"></component>
</template>
<script>
import someComponent from './someComponent'
export default {
components: {
someComponent,
},
}
</script>

这里没有任何东西,因为我们想要动态地使用我们的组件。所以我们可以做的是使用Webpack的动态导入。与计算值一起使用时,这就是魔术发生的地方 – 是的,计算值可以返回一个函数。超级方便!


computed: {
loader() {
if (!this.type) {
return null
}
return () => import(`templates/${this.type}`)
},
},

安装我们的组件后,我们尝试加载模板。如果出现问题我们可以设置后备模板。也许这对向用户显示错误消息很有帮助。


mounted() {
this.loader()
.then(() => {
this.component = () => this.loader()
})
.catch(() => {
this.component = () => import('templates/default')
})
},

结论

如果您有一个组件的许多不同视图,则可能很有用。

易于扩展。
它是异步的。模板仅在需要时加载
。保持代码干净。

基本上就是这样!