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全局变量为例
- 在state中定义变量
- 在Mutations中定义一个方法setIsLoad
- 在setIsLoad中传入参数state和isLoad 并 赋值
- 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 }); } },