# 演示用例

全部代码都放上来的话太多了,所以只放了layout的部分,完整源码可以前去GitHub仓库 (opens new window) 的example目录下查看

demo的菜单
export default [
  {
    fullPath: '/',
    meta: { title: '根菜单', icon: 'el-icon-success' },
    children: [
      {
        fullPath: '/index',
        meta: { title: '首页', icon: 'el-icon-platform-eleme', affix: true }
      },
      {
        fullPath: '/test',
        meta: { title: '测试页', icon: 'el-icon-phone' }
      },
      {
        fullPath: '/reuse/1',
        meta: { title: '复用路由1', icon: 'el-icon-phone' }
      },
      {
        fullPath: '/reuse/2',
        meta: { title: '复用路由2', icon: 'el-icon-phone' }
      },
      {
        fullPath: '/nest',
        meta: { title: '嵌套页', icon: 'el-icon-s-order' },
        children: [
          {
            fullPath: '/nest0',
            meta: { title: '嵌套页0', icon: 'el-icon-s-order' }
          },
          {
            fullPath: '/nest0-1',
            meta: { title: '嵌套页0-1', icon: 'el-icon-s-order' }
          }
        ]
      },
      {
        fullPath: '外链父级',
        meta: { title: '外链', icon: 'el-icon-s-flag' },
        children: [
          {
            fullPath: 'https://www.taobao.com',
            meta: { title: '淘宝' }
          },
          {
            fullPath: 'https://www.baidu.com',
            meta: { title: '百度' }
          }
        ]
      },
      {
        fullPath: '/dsafwqewq',
        meta: { title: '没有对应路由的菜单', icon: 'el-icon-platform-eleme' }
      }
    ]
  },
  {
    fullPath: '/iframe',
    meta: { title: 'iframe', icon: 'el-icon-s-flag' },
    children: [
      {
        fullPath: '/iframe/taobao',
        meta: { title: '淘宝' }
      },
      {
        fullPath: '/iframe/baidu',
        meta: { title: '百度' }
      }
    ]
  },
  {
    fullPath: '/breadcrumb',
    meta: { title: '面包屑', icon: 'el-icon-s-cooperation' },
    children: [
      {
        fullPath: '/breadcrumb/simple',
        meta: { title: '简单' }
      },
      {
        fullPath: '/breadcrumb/list',
        meta: { title: '列表页' }
      }
    ]
  }
]
demo的样式(个别会有自己的特殊样式)
html, body, #app {
    height: 100%;
    margin: 0;
}

# 基础使用

最基本的例子,只需要传入菜单即可

# 从服务器加载菜单

store的数据变化会触发视图更新,利用这一点来实现异步编程。通过appStore.loadingMenu可以控制菜单的加载情况

# 自定义menu

导航菜单分为侧边栏菜单和顶栏菜单,前者仅在移动端或非head导航模式下渲染,后者仅在非移动端和非aside导航模式下渲染。 两者都有menu-icon(自定义菜单图标)和menu-content(自定义菜单内容)插槽

这两个插槽都会传入{menu: 菜单对象, depth: 菜单当前的层级深度}

注意

自定义侧边栏菜单的icon时,如果设置了asideStore.showParentOnCollapse, 那么侧边栏折叠时,弹出菜单父级的深度会比未折叠时+1

# 自定义汉堡包位置

汉堡包就是控制侧边栏折叠的按钮,默认是位于侧边栏的底部(移动端时会位于顶栏左侧)

# 自定义页头

默认的页头会带有一个面包屑,如果不想要可以通过page页面的header插槽来自行定制

# 自定义页脚

el-admin-layout并不提供默认的页脚组件,有需要的可以用page页面的footer插槽来自行定制

注意

如果需要修改页脚的高度,建议通过修改scss变量中的$page-footer-height

# 侧边栏搜索框

通过侧边栏的header插槽将搜索框放到侧边栏顶部,使用asideStore.postMenus确定最终需要渲染的菜单,最后通过侧边栏的menu-content插槽实现高亮搜索词

其中有用到jsx语法和函数式组件,以及一些涉及el-admin-layout源码的代码,不过核心还是上面的三点

# 模拟移动端

可能有时候需要让el-admin-layout在桌面端以移动端的形式渲染,可以通过Const.maxMobileWidthappStore.isMobile实现

注意

这种方式会让一些css失效,比如辅助类hide-on-mobile

# 设置抽屉

el-admin-layout并不像ant-design-pro那样会有一个设置抽屉(这东东自己写更快),所以需要自己搞定

本示例只是列出了比较常用的设置项,所有的设置项请查看数据控制

小优化

像设置抽屉这种和其他组件基本没有关联的组件,建议自己控制数据,这样不会说每打开一次抽屉,父组件就render一次

# 持久化页签

这个功能不看源码就做的话,可能会出问题,所以出一个demo

打开几个页签然后刷新iframe即可看到效果(当然也可以直接跳转到iframe的地址)

这个demo会将页签数据存储到sessionStorage里,键是'eal-test-persist-tags',关闭页面即可清除

# 仿旧版七牛云侧边栏

说实话,如果真有这种需求,强烈建议自己写layout,因为这种肯定是需要去看源码的(像插槽的传递、父子组件关系等等), 如果在el-admin-layout基础上搞,你看看demo就知道有多麻烦了

# 仿chrome页签

一个简易版本,样式参考了chrome-tabs (opens new window)

上次更新:: 10/16/2021, 1:03:10 PM