# 数据控制

el-admin-layout使用Vue.observable来创建响应式的数据控制store,每个store都有getters(获取数据)和mutations(修改数据)两种方法类型。

根据控制的对象不同,store分为app(基础框架)、aside(侧边栏)、header(顶栏)、page(页面)、tagsView(页签栏)五种

使用示例:

import {xxxGetters, xxxMutations} from 'el-admin-layout'

// 通过getters取val
console.log(xxxGetters.val)

// 通过mutations修改val。没有特殊说明的话,mutations都存在和getters中的属性名称相同的修改方法
xxxMutations.val('test')

// 一些mutations可能会有额外的特殊方法
xxxMutations.specialMethod('test')

强烈要求

如果store中的某个数据是引用类型(比如是个数组),那么直接修改也可以触发Vue更新:

//这是个数组[{title: 1}]
const arr = xxxGetters.array

arr[0].title = 2

//[{title: 2}]
console.log(xxxGetters.array)

但是尽量不要这么做,Vue官方文档 (opens new window)中有说明, 并且更重要的是,有些mutation不只是简单地修改值,还会有额外的附加操作:

//模拟store
const store = {val: 1}

//这个mutation会将store.val改为 传入的值 * 2
mutations.val(1)

//如果你不清楚这里面的逻辑,而只是把值改成1,那就出大问题了
getters.val = 1

# appStore

这里存放框架的基础数据

import {appGetters, appMutations} from 'el-admin-layout'

# appGetters

名称 说明 类型 默认
isMobile 判断当前是否为移动端,发生resize事件时该值会更新 boolean 初始化时根据常量中的maxMobileWidth判断
title 标题 string ''
logo logo地址 string ''
logoRoute 点击logo后跳转的路由,会传递给router-link的to (opens new window) 属性 string/object '/'
onLogoClick 点击logo容器时触发,会替换原有的逻辑 function(e) undefined
showLogo 是否显示logo boolean true
activeRootMenu 当前激活的顶部菜单的fullPath string ''
menus 所有的树形菜单 array []
loadingMenu 是否正在加载菜单,会让侧边栏菜单和顶栏菜单呈现加载状态 boolean false
struct 分层结构 'top-bottom''left-right' 'left-right'
navMode 导航模式 'aside''head''mix' 'mix'
  • 自定义渲染方法部分
名称 说明 类型 对应的插槽
logoSlot 自定义渲染logo (h, {img, title, props}) => VNode | VNode[] logo

# appMutations

  • 额外方法:
名称 说明 入参
modifyMenuMeta 修改某一个菜单的meta属性 (fullPath: string 菜单的fullPath, meta: MenuItemMeta)
modifyMenuMeta示例
const menus = [{
    fullPath: '/index',
    meta: {title: '首页', icon: 'icon'}
}]

//{title: '首页', icon: 'icon'} -> {title: '修改了', icon: 'icon'}
appMutations.modifyMenuMeta('/index', {title: '修改了'})

//{title: '首页', icon: 'icon'} -> {title: '修改了', icon: undefined}
appMutations.modifyMenuMeta('/index', {title: '修改了', icon: undefined})

WARNING

调用appMutations.isMobileappMutations.activeRootMenu时,你应该知道你在做什么

# asideStore

这里存放侧边栏的基础数据

import {asideGetters, asideMutations} from 'el-admin-layout'

# asideGetters

名称 说明 类型 默认
show 抽屉模式时的显隐 boolean false
theme 主题 'light''dark'string 'dark'
uniqueOpen 是否使用手风琴效果 boolean true
collapse 是否折叠 boolean false
showParentOnCollapse 是否在折叠时显示上级菜单 boolean false
showHamburger 是否显示汉堡包 boolean true
autoHide 是否自动隐藏 boolean false
alwaysRender 是否在没有菜单时也渲染侧边栏 boolean false
postMenus 在侧边栏渲染前对菜单数据进行修改的函数,需要返回修改后的菜单数组! (menus) => array null
inlineIndent 子菜单的单位缩进距离 number 26
switchTransitionName 侧边栏菜单变化时的过渡动画名称 string 'sidebar'
defaultOpeneds 默认展开的菜单的fullPath数组 string[] []
  • 自定义渲染方法部分
名称 说明 类型 对应的插槽
defaultSlot 自定义渲染侧边栏内容 (h) => VNode aside
headerSlot 自定义渲染侧边栏头部内容 (h, logo) => VNode | VNode[] aside-header
footerSlot 自定义渲染侧边栏底部内容 (h, hamburger) => VNode | VNode[] aside-footer
menuIconSlot 自定义渲染菜单图标 (h, {menu, depth}) => VNode aside-menu-icon
menuContentSlot 自定义渲染菜单内容 (h, {menu, depth}) => VNode aside-menu-content

注意

postMenus中如果使用了其他响应式的数据,那么侧边栏会在数据变化时重新渲染!

这可能会在菜单数据量较大时导致性能问题

# asideMutations

  • 额外方法:
名称 说明 入参
open 移动端或设置了侧边栏自动隐藏时打开抽屉,否则展开 -
close 移动端或设置了侧边栏自动隐藏时关闭抽屉,否则折叠 -
switch 切换侧边栏的状态,open和close的聚合方法 (action: string),'open'或'close',为其他值时会把侧边栏改为相反的状态)

# headerStore

这里存放顶栏的基础数据

import {headerGetters, headerMutations} from 'el-admin-layout'

# headerGetters

名称 说明 类型 默认
theme 主题 'light''dark'string 'light'
showCollapseIcon 是否显示第一级水平菜单的展开折叠箭头 boolean false
avatar 头像地址 string -
username 用户名称 string -
dropdownItems 自定义下拉菜单项 DropdownItem[] []
  • 自定义渲染方法部分
名称 说明 类型 对应的插槽
dropdownItemsSlot 自定义渲染下拉菜单项 (h) => VNode[] header-dropdown-items
leftSlot 自定义渲染左侧内容 (h, [logo, hamburger]) => VNode | VNode[] header-left
centerSlot 自定义渲染中部内容 (h, [headMenu]) => VNode | VNode[] header-center
rightSlot 自定义渲染右侧内容 (h, [refreshBtn, dropdown]) => VNode | VNode[] header-right
menuIconSlot 自定义渲染菜单图标 (h, {menu, depth}) => VNode header-menu-icon
menuContentSlot 自定义渲染菜单内容 (h, {menu, depth}) => VNode header-menu-content
DropdownItem类型定义
属性 说明 类型
icon 图标 string
content 菜单内容 string
handler 点击时触发的方法 function(e)

# headerMutations

具备所有方法

# pageStore

这里存放路由页面的基础数据

import {pageGetters, pageMutations} from 'el-admin-layout'

# pageGetters

名称 说明 类型 默认
enableTransition 是否启用过渡动画 boolean true
transition 路由过渡动画配置 Transition
showIframe 是否显示iframe boolean false
currentIframe 当前iframe的src string ''
iframeList 所有iframe的src数组 array []
showHeader 是否显示页头 boolean true
showFooter 是否显示页脚 boolean true
  • 自定义渲染方法部分
名称 说明 类型 对应的插槽
headerSlot 自定义渲染页头内容 (h) => VNode | VNode[] page-header
footerSlot 自定义渲染页脚内容 (h) => VNode | VNode[] page-footer
Transition类型定义
名称 说明 类型 默认
default 当未启用页签栏时的路由动画 string 'el-fade-in'
next 要访问的tab顺序高于上一个访问的tab时的路由动画 string 'left-out'
prev 要访问的tab顺序不高于上一个访问的tab时的路由动画 string 'right-out'
curr 当前使用的路由动画 string 'el-fade-in'

# pageMutations

  • 额外方法:
名称 说明 入参
addIframe 向iframe数组中添加新的src,会去重 (src: string)
delIframe 删除iframe数组指定的src (src: string)
openIframe 显示指定的iframe (src: string)
closeIframe 关闭指定的iframe (src: string, del: boolean 是否在关闭后删除该iframe)

注意

pageMutations.transition会使用Object.assign将传入的值与原始值进行合并!

WARNING

调用pageMutations.showIframepageMutations.currentIframepageMutations.iframeList时,你应该知道你在做什么

# tagsViewStore

这里存放页签栏的基础数据

import {tagsViewGetters, tagsViewMutations} from 'el-admin-layout'

# tagsViewGetters

名称 说明 类型 默认
enabled 是否启用 boolean true
enableCache 是否启用缓存功能 boolean true
enableChangeTransition 是否启用根据页签顺序来确定过渡动画的功能 boolean true
visitedViews 页签栏中的页签数组 array []
cachedViews 缓存的路由页面key的数组 string[] []
  • 自定义渲染方法部分
名称 说明 类型 对应的插槽
itemSlot 自定义渲染页签 (h, {key: string, active: boolean, on?: { [k: string]: Function }, title: string, close?: Function}) => VNode tags-view-item

# tagsViewMutations

  • 有变动的原始方法:
名称 说明 入参
enabled 停用时会移除所有缓存,并且重置路由过渡动画 (v: boolean)
enableCache 停用时会移除所有缓存 (v: boolean)
enableChangeTransition 停用时会将pageGetters.transition.curr设为为默认值 (v: boolean)
  • 额外方法:
名称 说明 入参
addTagOnly 在页签栏上添加一个页签,没有标题、已存在的不会重复添加 (v: 页签对象)
addCacheOnly 加入缓存,当设置了不缓存、已被缓存时调用无效 (v: 页签对象)
addTagAndCache 同时调用addTagOnlyaddCacheOnly (v: 页签对象)
delTagOnly 从页签栏中移除一个页签 (v: 页签对象)
delCacheOnly 删除对应的缓存 (v: 页签对象)
delTagAndCache 同时调用delTagOnlydelCacheOnly (v: 页签对象)
delOtherTagAndCache 移除其他的非固定页签以及其他的缓存 (v: 页签对象)
delAllCache 移除所有缓存
delAllTagAndCache 移除所有非固定页签和所有缓存

WARNING

调用tagsViewMutations.visitedViewstagsViewMutations.cachedViews时,你应该知道你在做什么

上次更新:: 12/9/2021, 11:01:37 AM