系统a,b,c都需要一个页面x。
但是在不同的系统打开页面x时,需要依然显示homea或b或c
但是本人又不想写三个页面x分别放在home a/b/c的children下面,请问应该如何解决呢?
额。。这个需求,在服务器端很容易实现,include 或者 exec cgi 之类的都可以实现,并且数据传递什么的也方便
仅在客户端实现的话,iframe 或者 frameset 了解下,这样的话,top 的 location 还是当前路径
再不行,你可以用异步请求,加载一个模板页,然后,到当前页面渲染
可以把页面x设计成一个组件,供各个系统调用。node.js、vue.js的特性之一就是组件化,提高代码复用。
可以使用 Vue.js 的动态组件来解决这个问题。具体做法是在 homea/b/c 中使用一个动态组件,通过 props 传递需要展示的页面 x 的组件名给这个动态组件,在动态组件中根据传入的组件名动态渲染对应的子组件 x。
示例代码如下:
在 homea/b/c 的模板中添加动态组件:
<template>
<div>
<h1>{{ title }}</h1>
<<component :is="childComponent"></component>
</div>
</template>
在 homea/b/c 的脚本中定义 props 和 data:
export default {
props: {
childComponent: {
type: String,
required: true
}
},
data() {
return {
title: 'Home A/B/C'
}
}
}
在父组件中通过 props 把组件名传递给子组件:
<template>
<div>
<homea :child-component="'page-x'"></homea>
<homeb :child-component="'page-x'"></homeb>
<homec :child-component="'page-x'"></homec>
</div>
</template>
在父组件的脚本中注册子组件 x 和父组件 homea/b/c:
import PageX from './PageX.vue'
import HomeA from './HomeA.vue'
import HomeB from './HomeB.vue'
import HomeC from './HomeC.vue'
export default {
components: {
PageX,
HomeA,
HomeB,
HomeC
}
}
这样就可以在不同的系统中共用同一个页面 x,并且在不同的系统中展示不同的父组件。
那个页面 可以 单独写个 页面 然后部署到服务 端 ,其他项目就可以 用 地址访问到了