Metis

Vue Antd Admin中展开运算符(spread oper

2020-12-14  本文已影响0人  万州客

Vue Antd Admin中,有很多地方用到了ES6的新语法:展开运算符(spread operator)。我这里就以vuex中store文件里的...(三个点的省略号)展开运算符来作说明。

在Vue Antd Admin框架中的/src/store/modules/setting.js文件中,定义了整个框架的一些共用的主题,样式,色彩,菜单的设置。
其state状态值定义如下:

import config from '@/config'
import {ADMIN} from '@/config/default'
import {formatFullPath} from '@/utils/i18n'
import {filterMenu} from '@/utils/authority-utils'
import {getLocalSetting} from '@/utils/themeUtil'

const localSetting = getLocalSetting(true)

export default {
  namespaced: true,
  state: {
    isMobile: false,
    animates: ADMIN.animates,
    palettes: ADMIN.palettes,
    pageMinHeight: 0,
    menuData: [],
    activatedFirst: undefined,
    ...config,
    ...localSetting
  }
...
}

其中,使用了两个展开运算符:config和localSetting。那这两个变量展开后的效果如何呢?
我们先看看这两个变量在展开之前的样子。
config的对象内容

{lang: "CN", theme: {…}, layout: "side", fixedHeader: false, fixedSideBar: true, …}
animate:
direction: "left"
disabled: true
name: "lightSpeed"
__ob__: Observer {value: {…}, dep: Dep, vmCount: 0}
get direction: ƒ reactiveGetter()
set direction: ƒ reactiveSetter(newVal)
get disabled: ƒ reactiveGetter()
set disabled: ƒ reactiveSetter(newVal)
get name: ƒ reactiveGetter()
set name: ƒ reactiveSetter(newVal)
__proto__: Object
asyncRoutes: false
copyright: "2020 Metis"
filterMenu: true
fixedHeader: false
fixedSideBar: true
fixedTabs: false
footerLinks: (3) [{…}, {…}, {…}, __ob__: Observer]
hideSetting: false
lang: "CN"
layout: "side"
multiPage: true
pageWidth: "fixed"
showPageTitle: true
systemName: "Metis"
theme:
color: "#13c2c2"
error: "#f5222f"
mode: "dark"
success: "#52c41a"
warning: "#faad14"
__proto__: Object
weekMode: false

localSetting的对象内容

{theme: {…}, fixedHeader: true}
fixedHeader: true
theme:
color: "#fa541c"
error: "#f5222f"
mode: "light"
success: "#52c41a"
warning: "#faad14"

那当我们把config和localSetting展开以后,则这两个对象里的属性,则变量成了state里的同名属性,可直接使用。这是虾米意思?
接着看,下面显示的成对的变量,表达的就是同一个值,OK了呢?

//两个相同
console.log(config.lang)
console.log(state.lang)
//两个相同
console.log(config.layout)
console.log(state.layout)
//两个相同
console.log(localSetting.fixedHeader)
console.log(state.fixedHeader)

其输出如下:

CN
CN
side
side
true
true
上一篇 下一篇

猜你喜欢

热点阅读