关于vue项目全局变量定义、赋值与取值以及全局方法的定义和使用

关于vue全局变量的管理可参看  vuex官方文档

此处只是本人在开发过程中的一些记录,方便查阅,希望能给各位带来一些帮助!

全局变量定义:

在目录store下创建目录modules目录然后创建文件config.js:

const getDefaultState = () => {
    sys: {}
}

const state = getDefaultState()

const mutations = {
  setSys: (state, sysConfigs) => {
    state.sys = sysConfigs
  }
}

export default {
  namespaced: true,
  state,
  mutations
}
View Code

以上方式变量的赋值为同步进行的,要想进行异步复制比如通过ajax请求回来的数据设置全局变量可使用以下方式:

在目录store下创建文件actions.js

import sysConfig from '@/api/platform/sys-config.js'

const actions = {
  getSysConfig: (context) => {
    sysConfig.getSysConfigs().then(res => {
      context.commit('config/setSys', res.data)
    })
  }
}
View Code

其中sysConfig.getSysConfigs()为定义的全局方法,会在下面说明

在目录store下创建文件getters.js:

const getters = {
  sys: state => state.config.sys
}
export default getters

在目录store下创建文件index.js:

import Vue from 'vue'
import Vuex from 'vuex'
import getters from './getters'
import actions from './actions'
import config from './modules/config'

Vue.use(Vuex)

const store = new Vuex.Store({
  modules: {
    config
  },
  getters,
  actions
})

export default store
View Code

全局方法的定义:

在目录api下创建sysConfig.js:

import axios from '@/utils/request'
import base from '../base' // 导入接口域名列表

const sysConfig = {

  // 获取sysConfigs 系统配置
  getSysConfigs() {
    return axios.get(`${base.url}/params/get-sys-configs`)
  },
}

export default sysConfig
View Code

在目录api下创建index.js:

/**
 * api接口的统一出口
 */
import sysConfig from './sysConfig.js'

// 导出接口
export default {
  sysConfig
}
View Code

全局主文件main.js:

import Vue from 'vue'

import ElementUI from 'element-ui'
import api from './api'
import store from './store'
// set ElementUI lang to EN
// Vue.use(ElementUI, { locale })
// 如果想要中文版 element-ui,按如下方式声明
Vue.use(ElementUI)
import App from './App'
import router from './router'

Vue.prototype.$api = api
Vue.config.productionTip = false

new Vue({
  el: '#app',
  router,
  store,
  render: h => h(App)
})
View Code

这里注意全局方法的导入方式略有不同:Vue.prototype.$api = api

注意这里使用 inport 默认导入的是目录下的index.js 否则需写明文件名!!!

 

全局变量的赋值:

html中:<div class="search-box" @click="$store.commit('config/setSys', {'id': '123', 'name': 'name'})" />

js中: this.$store.commit('config/setSys', {'id': '123', 'name': 'name'})

 

全局变量的取值:

html中:<div class="search-box" @click="$store.getters.sys.name" />

js中: this.$store.getters.sys.name

 

全局方法的调用:

this.$api.sysConfig.getSysConfigs().then(res => {}).catch(_error => {}).finally()

 

因此处全局方法是请求ajax的,所以会有: 请求成功回调 then,请求出错回调 catch, 和无论请求成功还是失败都会调用的 finally

具体的全局方法需在实际开发应用中定义使用!!!

 

每天进步一点点,点滴记录,积少成多。

以此做个记录,

如有不足之处还望多多留言指教!

posted @ 2021-07-05 19:09  金刀3691  阅读(3953)  评论(0编辑  收藏  举报