vuex.vue 3.7 KB
Newer Older
VK1688's avatar
1.4.4  
VK1688 已提交
1 2 3 4 5 6
<template>
	<view class="content">
		<view>
			Vuex可以用来做全局状态管理。
			而此例子是演示将当前登录用户信息存入Vuex,以便于在其他页面中也能直接渲染或获取用户信息
		</view>
VK1688's avatar
1.4.6  
VK1688 已提交
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
		<view style="margin-top: 10rpx;">
			说明:
			<view style="margin-top: 10rpx;">
				1、<text>$user</text> 对应 store/modules 目录下的js文件,同理,你可以在store/modules目录下新建一个$cart.js文件来专门储存购物车信息<br/>
				2、页面上直接渲染Vuex数据:<br/>
				$user.userInfo<br/>
				3、js 内获得Vuex数据:<br/>
				let userInfo = vk.state('$user').userInfo;<br/>
				4、js 内更新Vuex数据:<br/>
				vk.vuex('$user.userInfo.avatar', avatar);<br/>
			</view>
		</view>
		<view v-if="$user.userInfo" style="color: red;margin-top: 10rpx;font-size: 36rpx;">
			当前登录用户:{{ $user.userInfo.nickname || $user.userInfo.username}}
			<u-avatar :src="$user.userInfo.avatar" size="70"></u-avatar>
VK1688's avatar
1.4.4  
VK1688 已提交
22 23 24 25 26 27
		</view>
		<view style="margin-top: 20rpx;">
			<input type="text" v-model="form1.username" placeholder="用户名/邮箱/手机号" />
			<input type="text" v-model="form1.password" password="true" placeholder="密码" />
			<button type="default" @tap="register">注册</button>
			<button type="default" @tap="login">登录</button>
VK1688's avatar
1.4.6  
VK1688 已提交
28
			<button type="default" @tap="uploadAvatar">上传到云储存(并设置为头像)</button>
VK1688's avatar
1.4.4  
VK1688 已提交
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
			<button type="default" @tap="logout">退出</button>
		</view>
	</view>
</template>

<script>
	var that;											// 当前页面对象
	var app = getApp();						// 可获取全局配置
	var vk;												// 自定义函数集
	export default {
		data() {
			return {
				form1:{
					username: 'admin',
					password: '123456'
				}
			}
		},
		onLoad(options) {
			that = this;
			vk = that.vk;
		},
		methods: {
			// 用户注册
			register(){
				var form1 = that.form1;
				vk.userCenter.register({
					data:form1,
					success:function(data){
						vk.alert("注册成功!");
					}
				});
			},
			// 用户登陆
			login(){
				var form1 = that.form1;
				vk.userCenter.login({
					data:form1,
					success:function(data){
						// 登录成功后将用户信息写入$store
VK1688's avatar
1.4.6  
VK1688 已提交
69
						vk.vuex('$user.userInfo', data.userInfo);
VK1688's avatar
1.4.4  
VK1688 已提交
70 71 72 73 74 75 76 77 78
						vk.alert("登陆成功!");
					}
				});
			},
			// 退出
			logout(){
				vk.userCenter.logout({
					success:function(data){
						// 退出成功后清楚$store的用户信息
VK1688's avatar
1.4.6  
VK1688 已提交
79
						vk.vuex('$user.userInfo', '');
VK1688's avatar
1.4.4  
VK1688 已提交
80 81 82 83
						vk.alert("退出成功");
					}
				});
			},
VK1688's avatar
1.4.6  
VK1688 已提交
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
			// 上传头像到云储存,并设置为头像
			uploadAvatar(){
				// 选择图片
				uni.chooseImage({
					count: 1, 
					sizeType: ['compressed'],
					success: function (res) {
						// 上传图片到云储存
						vk.callFunctionUtil.uploadFile({
							title:"上传中...",
							filePath: res.tempFilePaths[0],
							fileType: "image",
							success(res) {
								// 执行绑定头像
								vk.userCenter.setAvatar({
									data: {
										avatar: res.fileID,
									},
									success() {
										// 修改Vuex用户状态
										vk.vuex('$user.userInfo.avatar', res.fileID);
									}
								});
							}
						});
					}
				});
			}
		},
		// 计算属性
		computed:{
			
VK1688's avatar
1.4.4  
VK1688 已提交
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
		}
	}
</script>

<style lang="scss" scoped>
	.content {
		padding: 15px;
	}
	.content input {
		height: 46px;
		border: solid 1px #DDDDDD;
		border-radius: 5px;
		margin-bottom: 15px;
		padding: 0px 15px;
	}
	.content button {
		margin-bottom: 15px;
	}
	.content navigator {
		display: inline-block;
		color: #007AFF;
		border-bottom: solid 1px #007AFF;
		font-size: 16px;
		line-height: 24px;
		margin-bottom: 15px;
	}
	.tips {
		text-align: center;
		line-height: 20px;
		font-size: 14px;
		color: #999999;
		margin-bottom: 20px;
	}
VK1688's avatar
1.4.6  
VK1688 已提交
149
</style>