利用Vuex实现uni-app项目全局接收存取url参数

前些时间写了 Vue状态管理模式:Vuex入门教程 ,今天再整理一下,利用 Vuex 全局接受参数及存取使用的一个方法。

首先要使用 store ,安装及使用方法参见上文。

./store/index.js 中添加代码:

  1. const store = new Vuex.Store({
  2.   state: {
  3.     device: null, // 设备来源
  4.   },
  5.   mutations: {
  6.     /*
  7.      * 更新设备来源
  8.      */
  9.     UPDATE_DEVICE (state, deviceStr) {
  10.       if (deviceStr) {
  11.         state.device = deviceStr.toLowerCase()
  12.         console.log('device:' + state.device)
  13.       }
  14.     }
  15.   }
  16. });
  17.  
  18. export default store

这里使用了 toLowerCase() 方法,是将接收的参数统一转换为小写。

当然你也可以使用 toUpperCase() 方法将接收的参数统一转换成大写,也可以不进行转换,直接保存。

./App.vue 中展开并调用 mutations 方法,在 onLaunch 中调用:

  1. import { mapMutations } from 'vuex'
  2.  
  3. onLaunch: function(e) {
  4.     // 获取设备参数
  5.     let device = e.query.device
  6.     if (device) {
  7.       this.saveState(e.query)
  8.     }
  9. },
  10. methods: {
  11.   ...mapMutations(['UPDATE_DEVICE']),
  12.   
  13.   saveState: function (query) {
  14.     if (query.device) {
  15.       this.UPDATE_DEVICE(query.device)
  16.     }
  17.   }
  18. }

我是在 App.vue 中调用的,当然你也可以使用 Vue 的路由钩子:

  1. import vue from "vue";
  2. import vueRouter from "vue-router"
  3. import routes from "../routes"
  4. import store from "../store"
  5.  
  6. vue.use(vueRouter);
  7.  
  8. const router = new vueRouter({
  9.   routes,
  10.   mode: "history"
  11. })
  12.  
  13. router.beforeEach((to, from, next) => {
  14.   //判断设备
  15.   store.commit('UPDATE_DEVICE', to.query.device)
  16.  
  17.   next()
  18. });

这样就可以在任意位置调用并存取接收到的参数了:

例如在 ./src/pages/index/index.vue 中使用:

  1. let device = this.$store.state.device || null


未经允许不得转载:前端资源网 - w3h5 » 利用Vuex实现uni-app项目全局接收存取url参数

赞 (2)
分享到: +

评论 沙发

Avatar

换个身份

  • 昵称 (必填)
  • 邮箱 (选填)