uniapp中设置全局变量---vuex仓库

在一些情境下会应用到全局变量,接下来便来定义全局变量

会应用到vuex仓库,不了解的可以先看其基础语法,
    创建仓库 在项目根目录下创建一个名为“store”的文件夹,文件夹里存放index .js文件和moudles文件夹,moudles文件夹中存放一个自定义名称的js 文件,这里我叫user.js 如图: 在index.js文件中写入以下代码
index.js文件
import Vue from vue
import Vuex from vuex
import user from @/store/modules/user.js

Vue.use(Vuex)

export default new Vuex.Store({
          
   
	modules: {
          
   
		user,
	}
})

在user.js文件中写入需要的全局变量和方法 以isLoad全局变量为例

  1. 在state中定义变量
  2. 在Mutations中定义一个方法setIsLoad
  3. 在setIsLoad中传入参数state和isLoad 并 赋值
  4. this.State = isLoad
export default {
          
   
	state: {
          
   
		//定义的全局变量
		token: null,	
		user: {
          
   },
		cid: null,
		isLoad: false,
	},
	// 计算属性 可以获得参数,第一个是state,第二个是getters(自身) 用户传参(state,getters)=> (id)=>{}
	getters: {
          
   
		getUser: state => state.user,
		getToken: state => state.token,
		
	},
	mutations: {
          
   
		//  登录
		setUser(state, userInfo) {
          
   
			state.user = userInfo
			uni.setStorageSync(user, userInfo)
		},
		setToken(state, token) {
          
   
			state.token = token
			uni.setStorageSync(token, token)
		},
		clearToken(state){
          
   
			state.token = 
			uni.clearStorageSync(token)
		},
		initUser(state) {
          
   
			const user = uni.getStorageSync(user)
			const token = uni.getStorageSync(token)
			if(user) {
          
   
				state.user = JSON.parse(user)
			}
			if(token) {
          
   
				state.token = token
			}
		},
		setIsLoad(state, isLoad) {
          
   
			state.isLoad = isLoad
		}
	},
	actions: {
          
   
		
	}
}
    配置仓库 在main.js文件中配置如下
import Vue from vue
import App from ./App
//引入配置仓库
import store from ./store
import request from common/lib/request.js
import uView from uview-ui

Vue.config.productionTip = false
//引入配置仓库
Vue.prototype.$store = store
Vue.prototype.$http = request
// 保留当前页面,跳转到应用内的某个页面,使用uni.navigateBack可以返回到原页面。
Vue.prototype.navigateTo = (options) => {
          
   
 uni.navigateTo(options)
}
// 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。
Vue.prototype.switchTab = (options) => {
          
   
 uni.switchTab(options)
}

App.mpType = app
Vue.use(uView)

const app = new Vue({
          
   
	store,
    ...App
})
app.$mount()
    调用仓库 在调用页面导入所需内容
<script>
import {
          
    mapState, mapMutations } from vuex;
</script>
2.如果是state中的全局变量(不更改数据)
在调用页面的computed中操作
...mapState({
          
   
			token: state => state.user.token,
			isLoad : state => state.user.isLoad
		}),
3. 如果是Mutations中(需要更改数据)
	在调用页面的methods中操作
...mapMutations([clearToken,setIsLoad]),
4. 在methods的方法中可以用this.clearToken进行调用
async login() {
          
   
			const data = {
          
   
				userName: this.userName,
				password: this.password
			};
			const res = await this.$http.post(/user/login, data, {
          
    token: false });
			if (res.code !== 0) {
          
   
				return this.showToast(res.msg);
			}
			if (res.data.token) {
          
   
				this.setToken(res.data.token);  //!!!!!!这里
				this.loginShow = false;
				uni.reLaunch({
          
   
					url: ../index/index
				});
			}
		},
经验分享 程序员 微信小程序 职场和发展