企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 路由的其它配置 ## 命名视图 有时候想同时 (同级) 展示多个视图,而不是嵌套展示,**例如创建一个布局**,有`sidebar`(侧导航) 和`main`(主内容) 两个视图,这个时候命名视图就派上用场了。你可以在界面中拥有多个单独命名的视图,而不是只有一个单独的出口。如果`router-view`没有设置名字,那么默认为`default`。 ``` <router-view class="view one"></router-view> <router-view class="view two" name="a"></router-view> <router-view class="view three" name="b"></router-view> ``` ``` const router = new VueRouter({ routes: [ { path: '/', components: { default: Foo, a: Bar, b: Baz } } ] }) ``` ## 案例 移动端`tabbar` 底栏,有一些页面是不需要显示的。只有对应的这五个页面是需要显示`tabbar`底栏的,如何完成? ![](https://img.kancloud.cn/b2/af/b2af44b2c2e774a888817c999b0f37e9_396x677.gif) ## 思考 可以将网页分成两部分,上面一部分是网页的核心 ,那么`router-view`只显示网页核心 ;下面一部分是网页的底栏,那么`router-view`只显示网页的底栏。`router-view` 组件默认是不会区分上部和下部的。这就需要使用命名视图。 ![](https://img.kancloud.cn/d9/12/d9126b45d28d8fd89db06f9c0de5f8da_734x720.png) ## tabbar组件实现 >[success] 样式使用`less`,默认是`css`,需要对`style`标签添加`lang="less"` 。需要我们安装less-loader 和less不然会报错 > 如下 ``` /src/components/Tabbar.vue Module not found: Error: Can't resolve 'less-loader' in 'C:\Users\zhaoy\Desktop\myvuex' ``` ### **Tabbar组件,简易版(组件可以直接复制使用,不用书写)** ``` <template> <ul class="footer"> <li> <router-link to="/home"> <i class="iconfont icon-home"></i> <p>首页</p> </router-link> </li> <li> <router-link to="/cate"> <i class="iconfont icon-fenlei"></i> <p>分类</p> </router-link> </li> <li> <router-link to="/pingou"> <i class="iconfont icon-pingou"></i> <p>拼购</p> </router-link> </li> <li> <router-link to="/cart"> <i class="iconfont icon-gouwuche"></i> <p>购物车</p> </router-link> </li> <li> <router-link to="/user"> <i class="iconfont icon-yonghu"></i> <p>未登录</p> </router-link> </li> </ul> </template> <script> export default { name: "Tabbar" } </script> <style scoped lang="less"> .footer { z-index: 99; width: 100%; height: 44px; position: fixed; left: 0; bottom: 0; background: #ffffff; display: flex; li { width: 20%; height: 100%; a { width: 100%; height: 100%; display: flex; flex-direction: column; justify-content: center; align-items: center; align-content: center; &.active { color: #F23030; } } } .iconfont { font-size: 20px; } p { font-size: 12px; transform: scale(0.85, 0.85); } } </style> ``` ## APP组件修改 ``` <template> <div id="app"> <router-view></router-view> <router-view name="tabbar"></router-view> </div> </template> <script> import './assets/css/reset.css'; export default { name: 'app', } </script> <style> </style> ``` ## 路由修改 ``` var router = new VueRouter({ routes: [ {path: '/home', components: {default: Home, tabbar: Tabbar}}, {path: '/cate', components: {default: Category, tabbar: Tabbar}}, {path: '/pingou', components: {default: Purchase, tabbar: Tabbar}}, {path: '/cart', components: {default: Cart, tabbar: Tabbar}}, {path: '/user', components: {default: User, tabbar: Tabbar}}, {path: '/about', component: About}, {path: '*', component: Error404} ], linkActiveClass:'active', linkExactActiveClass:'exact-active' }); ``` ## 图示 ![](https://img.kancloud.cn/99/3d/993d28597bdc0fcbd6a61731c0bc6add_1920x571.png) ## 效果 ![](https://img.kancloud.cn/82/25/82258dfb9136b94b0a5f9794867c27de_418x685.gif)