携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第7天,点击查看活动详情
🍁 作者:知识浅谈,CSDN签约讲师,CSDN博客专家,华为云云享专家,阿里云星级博主
📌 擅长领域:全栈工程师、爬虫、ACM算法
💒 公众号:知识浅谈
🔥 联系方式vx:zsqtcc
uView UI模块的项目创建
安装方法: www.uviewui.com/components/…
uView UI的简单使用
uViewUI的组件:www.uviewui.com/components/…
uview封装vuex之后的用法
具体实现
-
uni-app目根目录新建'/store/index.js',并复制如下内容到其中
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) let lifeData = {}; try{ // 尝试获取本地是否存在lifeData变量,第一次启动APP时是不存在的 lifeData = uni.getStorageSync('lifeData'); }catch(e){ } //-----------------------重要点1:添加需要用就保存的vuex变量,从state中选取---------------------- // 需要永久存储,且下次APP启动需要取出的,在state中的变量名 let saveStateKeys = ['vuex_user', 'vuex_token']; // 保存变量到本地存储中 const saveLifeData = function(key, value){ // 判断变量名是否在需要存储的数组中 if(saveStateKeys.indexOf(key) != -1) { // 获取本地存储的lifeData对象,将变量添加到对象中 let tmp = uni.getStorageSync('lifeData'); // 第一次打开APP,不存在lifeData变量,故放一个{}空对象 tmp = tmp ? tmp : {}; tmp[key] = value; // 执行这一步后,所有需要存储的变量,都挂载在本地的lifeData对象中 uni.setStorageSync('lifeData', tmp); } } const store = new Vuex.Store({ //-----------------------重要点2: 添加vuex变量--------------------------- // 下面这些值仅为示例,使用过程中请删除 state: { // 如果上面从本地获取的lifeData对象下有对应的属性,就赋值给state中对应的变量 // 加上vuex_前缀,是防止变量名冲突,也让人一目了然 vuex_user: lifeData.vuex_user ? lifeData.vuex_user : {name: '明月'}, vuex_token: lifeData.vuex_token ? lifeData.vuex_token : '', // 如果vuex_version无需保存到本地永久存储,无需lifeData.vuex_version方式 vuex_version: '1.0.1', }, mutations: { $uStore(state, payload) { // 判断是否多层级调用,state中为对象存在的情况,诸如user.info.score = 1 let nameArr = payload.name.split('.'); let saveKey = ''; let len = nameArr.length; if(nameArr.length >= 2) { let obj = state[nameArr[0]]; for(let i = 1; i < len - 1; i ++) { obj = obj[nameArr[i]]; } obj[nameArr[len - 1]] = payload.value; saveKey = nameArr[0]; } else { // 单层级变量,在state就是一个普通变量的情况 state[payload.name] = payload.value; saveKey = payload.name; } // 保存变量到本地,见顶部函数定义 saveLifeData(saveKey, state[saveKey]) } } }) export default store -
uni-app目根目录新建'/store/u.mixin.js",您需要在
main.js中手动引入,并mixin处理。以下为"$u.mixin.js"文件:
// $u.mixin.js import { mapState } from 'vuex' import store from "@/store" // 尝试将用户在根目录中的store/index.js的vuex的state变量,全部加载到全局变量中 let $uStoreKey = []; try{ $uStoreKey = store.state ? Object.keys(store.state) : []; }catch(e){ } module.exports = { created() { // 将vuex方法挂在到$u中 // 使用方法为:如果要修改vuex的state中的user.name变量为"史诗" => this.$u.vuex('user.name', '史诗') // 如果要修改vuex的state的version变量为1.0.1 => this.$u.vuex('version', '1.0.1') this.$u.vuex = (name, value) => { this.$store.commit('$uStore', { name,value }) } }, computed: { // 将vuex的state中的所有变量,解构到全局混入的mixin中 ...mapState($uStoreKey) } }以下为"main.js"文件:
// main.js let vuexStore = require("@/store/$u.mixin.js"); Vue.mixin(vuexStore); -
在项目根目录的
main.js中,引入"/store/index.js",并放到Vue示例中// main.js import store from '@/store'; // 将store放入Vue对象创建中 const app = new Vue({ store, ...App }) -
配置完之后使用
1. 设置: 前提是state里边有对应的变量名 state: { vuex_version: '1.0.0', vuex_user: { name: '白居易' } } 然后进行设置 <script> export default { methods: { modifyVuex() { this.$u.vuex('vuex_version', '1.0.1'); // 修改对象的形式,中间用"."分隔 this.$u.vuex('vuex_user.name', '诗圣'); } } } </script> 2. 取出vuex中的值 <template> <view> <view> 版本号为:{{vuex_version}} 或者 {{this.vuex_version}} </view> <view> <<琵琶行>>的作者为{{vuex_user.name}} </view> <u-button @click="modifyVuex">修改变量</u-button> </view> </template>