目录
- 一、新建layouts
- 二、更新App.vue文件
- 三、选择一个布局(Layout)
- 四、通用菜单Menu的实现
- 菜单路由改为读取路由文件
- 五、绑定跳转事件
- 六、同步路由到菜单项
一、新建layouts
-
这里新建一个专门存放布局的布局文件layouts:
-
然后在该文件夹(layouts)下创建
BasicLayout.vue
文件:
注意,不要忘记<router-view />
,对于一个布局来说,我们肯定是希望可以动态的展示不同的页面。只不过是导航栏、底部信息等这些都是由固定区域的,所以才叫固定布局。
之后不要忘记在App.vue文件中引入该布局(BasicLayout.vue
)
二、更新App.vue文件
解释:在<template>
部分中包含了我们刚刚创建的BasicLayout
组件。另外,习惯上使用id="app"
包裹整个内容,方面后续页面的渲染(当然使用id="app"
来进行标识只是一个习惯而已)。
三、选择一个布局(Layout)
我们在Arco Design官网中选择要layout布局,这里选择了一个上中下的布局
<a-layout style="height: 400px;"><a-layout-header>Header</a-layout-header><a-layout-content>Content</a-layout-content><a-layout-footer>Footer</a-layout-footer>
</a-layout>
将其放入BasicLayout.vue
文件中,最终BasicLayout.vue文件更新如下:
<template><div id="basicLayout"><a-layout style="height: 400px"><a-layout-header class="header">导航栏</a-layout-header><a-layout-content class="content"><router /></a-layout-content><a-layout-footer class="footer"><a href="https://www.lanqiao.cn//" target="_blank">Online Judge by ly</a></a-layout-footer></a-layout></div>
</template>
<style scoped>
#basicLayout {
}#basicLayout .header {background: red;margin-bottom: 16px;
}#basicLayout .content {background: linear-gradient(to right, #eee, #fff);margin-bottom: 16px;
}#basicLayout .footer {background: #efefef;padding: 16px;position: absolute;bottom: 0;left: 0;right: 0;text-align: center;
}
</style>
效果如下:
四、通用菜单Menu的实现
由于这里菜单的制作有点复杂,所以这里将其抽象成一个公共的组件,创建为为GlobalHeader.vue
文件。依然是在Arco Design官网中选择一个Menu:
<a-menu mode="horizontal" theme="dark" :default-selected-keys="['1']"><a-menu-item key="0" :style="{ padding: 0, marginRight: '38px' }" disabled><div:style="{width: '80px',height: '30px',background: 'var(--color-fill-3)',cursor: 'text',}"/></a-menu-item><a-menu-item key="1">Home</a-menu-item><a-menu-item key="2">Solution</a-menu-item><a-menu-item key="3">Cloud Service</a-menu-item><a-menu-item key="4">Cooperation</a-menu-item>
</a-menu>
之后,加入logo图片,并设置css样式:
效果如下:
现在将菜单
根据路由文件
动态生成(什么是路由:访问不同的地址会加载不同的页面),即菜单上的路由改为读取路由文件(router中的index.ts,由脚手架自动生成),从而实现更通用的动态配置。
那么如何实现上述更通用的动态配置的,下面我们来一步一步实现。
菜单路由改为读取路由文件
我们知道,脚手架已经自动生成了一个路由文件,但是其中的routes路由是定义在index.ts文件中,如下:
下面我们一步步进行实现
- 第一步:在router文件中新建一个
routes.ts文件
。 - 第二步:提取通用路由文件(在
index.js
中),提取之后直接在新建的routes.ts文件
中导入即可。如下
现在路由文件就可以为菜单项提供服务了。
- 第三步:修改
GlobalHeader.vue文件
,如下:
// 核心代码
<a-menu-item v-for="item in routes" :key="item.path">{{ item.name }}
</a-menu-item>
解释:上述代码使用了Arco Design Vue中的<a-menu-item>组件
来动态生成菜单项。
效果如下:
可以显示高亮,但是并不进行页面的跳转
五、绑定跳转事件
现在我们进行事件的绑定。
效果演示:
现在,已经能够根据点击路由跳转到对应的页面,但是如果能够根据当前的页面地址激活页面对应的状态(即同步路由到菜单项)。
六、同步路由到菜单项
修改GlobalHeader.vue
文件。关键代码如下:
const router = useRouter();
const selectedKeys = ref(["/"]); // 默认主页router.afterEach((to, from, failure) => {selectedKeys.value = [to.path];
});
至此,通用菜单到这里就完成了。
梳理下思路:首先点击菜单项=>跳转更新路由=>更新路由后,同步去更新菜单栏的高亮状态
(即使刷新页面也会保持当前菜单项的高亮状态)。