我们的团队正在开发一个大型项目,我们希望构建一个包含多种表单、仪表板和功能的大型应用程序。一个单一的SPA会变得复杂。因此,我们讨论了“微前沿”建筑的方法。目标是生成一个包含多个子SPA的父SPA。所有SPAs都应该使用相同的框架: vueJS。
想法背后:微锋的
我们发现了一些支持这一点的实现:
我们想在我们的前端使用VueJS (vue,vue-路由器,vue-resource,vue-loade,webpack)
问题
发布于 2018-03-10 01:20:41
可行性:复合UI
是的,这是可能的。几乎所有你看到的独立的Vue组件都是使用标准Vue工具开发的可重用(可组合)组件的例子(vue-选择,滑块部件,甚至完整的组件“集合”),比如vuetify、引导-vue或Vue材料。
页面转换:路由
vue-路由器是这项工作的工具。它是由核心团队开发的,因此需要紧密的集成和强大的功能支持。
事件总线
每个Vue实例都实现一个事件接口。这意味着要在两个Vue实例或组件之间进行通信,可以使用自定义事件。您也可以使用Vuex (见下文)。
双向通信
从父组件向子组件发送数据的最佳方法是使用 道具。步骤:
props (数组或对象)<child :name="variableOnParent">传递给孩子。见下面的演示:
Vue.component('child-comp', {
props: ['message'], // declare the props
template: '<p>At child-comp, using props in the template: {{ message }}</p>',
mounted: function () {
console.log('The props are also available in JS:', this.message);
}
})
new Vue({
el: '#app',
data: {
variableAtParent: 'DATA FROM PARENT!'
}
})<script src="https://unpkg.com/vue@2.5.13/dist/vue.min.js"></script>
<div id="app">
<p>At Parent: {{ variableAtParent }}</p>
<child-comp :message="variableAtParent"></child-comp>
</div>
您还可以获得用于的引用,并在它们上调用方法。
Vue.component('my-comp', {
template: "#my-comp-template",
props: ['name'],
methods: {
saveMyComp() {
console.log('Saved:', this.name);
}
}
})
new Vue({
el: '#app',
data: {
people: [{name: 'Bob'}, {name: 'Nelson'}, {name: 'Zed'}]
},
methods: {
saveChild(index) {
this.$refs.myComps[index].saveMyComp();
}
}
});<script src="https://unpkg.com/vue@2.5.13/dist/vue.min.js"></script>
<div id="app">
<div v-for="(person, index) in people">
<button @click="saveChild(index)">saveMyComp</button>
<my-comp :name="person.name" ref="myComps"></my-comp>
</div>
</div>
<template id="my-comp-template">
<span> {{ name }} </span>
</template>
要将从子传递到父,您将使用事件。见下面的演示。还有一些几个修饰符可以使这个任务变得更容易。
var parent = {
template: '<div><child :content.sync="localContent"></child><br>At parent: {{ localContent }}</div>',
props: ['content'],
data() {
return {
localContent: this.content
}
}
};
var child = {
template: '<div>At child: {{ content.value }}<button @click="change">change me</button></div>',
props: ['content'],
methods: {
change() {
this.$emit('update:content', {value: "Value changed !"})
}
}
};
Vue.component('child', child);
Vue.component('parent', parent);
new Vue({
el: '#app'
});<script src="https://unpkg.com/vue@2.5.13/dist/vue.js"></script>
<div id="app">
<parent :content="{value:'hello parent'}"></parent>
</div>
维克斯
但是,不可避免的是,随着应用程序的发展,您将不得不使用一种更可伸缩的方法。在这种情况下,维克斯是事实上的解决方案。粗略地说,在使用Vuex时,您不需要在父级和子级之间传递状态:他们都会从Vuex商店(某种程度上是一个“全局”的反应性变量)获取状态。这极大地简化了应用程序管理,并且值得自己做一个职位。
最后注意事项:如您所见,Vue的一个很大的优点是您可以很容易地实现原型和测试功能。没有构建步骤,对原始JS的抽象也很少。与其他框架相比,我认为这是一个重要的好处。
发布于 2019-07-20 21:58:50
我一直在好奇地寻找一种快速实现微前端架构的方法。我发现的一些很好的资源是:
然而,我遇到的问题是设置的复杂性。我喜欢很快看到结果。
皮拉尔
Piral.io (遵从微前端体系结构的门户应用程序框架)仍然处于开发阶段,它主要针对React (另一个JS前端框架)。
Vue方法
我想出了一种方法,并希望能在不久的将来写一篇关于这方面的文章,不过暂时是这样的。
/apps/:app_name),您可以酌情加载子应用程序。在每个子应用程序中,您还可以设置一个路由系统。如果您想:
https://stackoverflow.com/questions/49196653
复制相似问题