Skip to content

Commit f403af2

Browse files
committed
引入uview简写的vuex
1 parent 62329f7 commit f403af2

File tree

4 files changed

+113
-7
lines changed

4 files changed

+113
-7
lines changed

uniapp/main.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
11
import App from './App'
22
import Vue from 'vue'
33
import uView from "uview-ui"
4+
import store from '@/store';
45
Vue.use(uView);
6+
7+
// 引入uView提供的对vuex的简写法文件
8+
let vuexStore = require('@/store/$u.mixin.js');
9+
Vue.mixin(vuexStore);
10+
11+
512
Vue.config.productionTip = false
613
App.mpType = 'app'
714
const app = new Vue({
15+
store,
816
...App
917
})
1018
app.$mount()

uniapp/pages/index/index.vue

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,34 @@
11
<template>
22
<view class="content">
3-
<image class="logo" src="/static/logo.png"></image>
4-
<view class="text-area">
5-
<text class="title">{{title}}</text>
6-
</view>
3+
<u-icon name="level" color="#2979ff" size="28"></u-icon>
4+
<u-button>默认按钮</u-button>
5+
<u-button type="primary">主要按钮</u-button>
6+
<u-button type="success">成功按钮</u-button>
7+
<u-button type="info">信息按钮</u-button>
8+
<u-button type="warning">警告按钮</u-button>
9+
<u-button type="error">危险按钮</u-button>
10+
<div>{{vuex_user.name}}</div>
711
</view>
812
</template>
913

1014
<script>
1115
export default {
1216
data() {
1317
return {
14-
title: 'Hello'
18+
1519
}
1620
},
1721
onLoad() {
18-
22+
this.$u.vuex('vuex_user.name', '诗圣');
23+
this.$u.toast('Hello uView!');
1924
},
2025
methods: {
2126
2227
}
2328
}
2429
</script>
2530

26-
<style>
31+
<style lang="scss">
2732
.content {
2833
display: flex;
2934
flex-direction: column;

uniapp/store/$u.mixin.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// $u.mixin.js
2+
3+
import { mapState } from 'vuex'
4+
import store from "@/store"
5+
6+
// 尝试将用户在根目录中的store/index.js的vuex的state变量,全部加载到全局变量中
7+
let $uStoreKey = [];
8+
try{
9+
$uStoreKey = store.state ? Object.keys(store.state) : [];
10+
}catch(e){
11+
12+
}
13+
14+
module.exports = {
15+
created() {
16+
// 将vuex方法挂在到$u中
17+
// 使用方法为:如果要修改vuex的state中的user.name变量为"史诗" => this.$u.vuex('user.name', '史诗')
18+
// 如果要修改vuex的state的version变量为1.0.1 => this.$u.vuex('version', '1.0.1')
19+
this.$u.vuex = (name, value) => {
20+
this.$store.commit('$uStore', {
21+
name,value
22+
})
23+
}
24+
},
25+
computed: {
26+
// 将vuex的state中的所有变量,解构到全局混入的mixin中
27+
...mapState($uStoreKey)
28+
}
29+
}

uniapp/store/index.js

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import Vue from 'vue'
2+
import Vuex from 'vuex'
3+
Vue.use(Vuex)
4+
5+
let lifeData = {};
6+
7+
try{
8+
// 尝试获取本地是否存在lifeData变量,第一次启动APP时是不存在的
9+
lifeData = uni.getStorageSync('lifeData');
10+
}catch(e){
11+
12+
}
13+
14+
// 需要永久存储,且下次APP启动需要取出的,在state中的变量名
15+
let saveStateKeys = ['vuex_user', 'vuex_token'];
16+
17+
// 保存变量到本地存储中
18+
const saveLifeData = function(key, value){
19+
// 判断变量名是否在需要存储的数组中
20+
if(saveStateKeys.indexOf(key) != -1) {
21+
// 获取本地存储的lifeData对象,将变量添加到对象中
22+
let tmp = uni.getStorageSync('lifeData');
23+
// 第一次打开APP,不存在lifeData变量,故放一个{}空对象
24+
tmp = tmp ? tmp : {};
25+
tmp[key] = value;
26+
// 执行这一步后,所有需要存储的变量,都挂载在本地的lifeData对象中
27+
uni.setStorageSync('lifeData', tmp);
28+
}
29+
}
30+
const store = new Vuex.Store({
31+
// 下面这些值仅为示例,使用过程中请删除
32+
state: {
33+
// 如果上面从本地获取的lifeData对象下有对应的属性,就赋值给state中对应的变量
34+
// 加上vuex_前缀,是防止变量名冲突,也让人一目了然
35+
vuex_user: lifeData.vuex_user ? lifeData.vuex_user : {name: '明月'},
36+
vuex_token: lifeData.vuex_token ? lifeData.vuex_token : '',
37+
// 如果vuex_version无需保存到本地永久存储,无需lifeData.vuex_version方式
38+
vuex_version: '1.0.1',
39+
},
40+
mutations: {
41+
$uStore(state, payload) {
42+
// 判断是否多层级调用,state中为对象存在的情况,诸如user.info.score = 1
43+
let nameArr = payload.name.split('.');
44+
let saveKey = '';
45+
let len = nameArr.length;
46+
if(nameArr.length >= 2) {
47+
let obj = state[nameArr[0]];
48+
for(let i = 1; i < len - 1; i ++) {
49+
obj = obj[nameArr[i]];
50+
}
51+
obj[nameArr[len - 1]] = payload.value;
52+
saveKey = nameArr[0];
53+
} else {
54+
// 单层级变量,在state就是一个普通变量的情况
55+
state[payload.name] = payload.value;
56+
saveKey = payload.name;
57+
}
58+
// 保存变量到本地,见顶部函数定义
59+
saveLifeData(saveKey, state[saveKey])
60+
}
61+
}
62+
})
63+
64+
export default store

0 commit comments

Comments
 (0)