微信小程序141~150

1.将token存储到Store
复制代码
import { observable, action } from 'mobx-miniprogram'
import { getStorage } from '../miniprogram/utils/storage'

// store对象
export const userStore = observable({
// 定义响应式数据
token: getStorage('token') || '',

  // action用来修改状态
  setToken: action(function (token) {
    this.token = token
  }),

})
2.用户信息存储到Store

调用接口获取用户信息,获取数据以后要存储用户信息数据到本地,为了方便用户信息的获取和使用,将其存储到store

复制代码
import { observable, action } from 'mobx-miniprogram'
import { getStorage } from '../utils/storage'

// store对象
export const userStore = observable({
  // 定义响应式数据
  token: getStorage('token') || '',
  userInfo: getStorage('uesrInfo') || {},
  // action用来修改状态
  setToken: action(function (token) {
    this.token = token
  }),
  setUserInfo: action(function (userInfo) {
    this.userInfo = userInfo
  })
})
3.使用数据渲染用户信息

将用户信息数据从store取出,并渲染到页面上。

复制代码
import { ComponentWithStore } from 'mobx-miniprogram-bindings'
import { userStore, userstore } from '../../stores/userstore'
// pages/info/info.js
ComponentWithStore({
  // 页面的初始数据
  data: {
    // 初始化第二个面板数据
    initpanel: [
      {
        url: '/pages/order/list/list',
        title: '商品订单',
        iconfont: 'icon-dingdan'
      },
      {
        url: '/pages/order/list/list',
        title: '礼品卡订单',
        iconfont: 'icon-lipinka'
      },
      {
        url: '/pages/order/list/list',
        title: '退款/售后',
        iconfont: 'icon-tuikuan'
      }
    ]
  },
  storeBindings: {
    store: userStore,
    fields: ['token', 'userInfo']
  },

  // 跳转到登录页面
  toLoginPage() {
    wx.navigateTo({
      url: '/pages/login/login'
    })
  }
})
4.配置分包以及预下载

在app.json中

复制代码
分包
"subPackages": [
        {
            "root": "modules/settingModule",
            "name": "settingModule",
            "pages": [
                "pages/address/add/index",
                "pages/address/list/index",
                "pages/profile/profile"
            ]
        }
    ]
预下载
"preloadRule": {
        "pages/settings/settings": {
            "network": "all",
            "packages": ["settingModule"]
        }
    }
5.渲染用户信息
复制代码
import { BehaviorWithStore } from 'mobx-miniprogram-bindings'
import { userStore } from '../../../../stores/userstore'
export const userBehavior = BehaviorWithStore({
  storeBindings: {
    store: 'userStore',
    fields: ['userInfo']
  }
})


import { userBehavior } from './behavior'
Page({
  // 注册behavior
  behavior: [userBehavior]
  })
6.更新用户头像
1.获取头像临时路径
复制代码
// 更新用户头像
  chooseAvatar(event) {
      // 获取临时路径有时效时间,需要将其上传到公司服务器,获取永久路径,在用永久路径更新headimageurl,用户保存
    const { avatarUrl } = event.detail
    this.setData({
      'userInfo.headimageurl': avatarUrl
    })
  },
2.头像临时路径上传到服务器
复制代码
第一种方式
wx.uploadFile({
      filePath: 'avatarUrl',
      name: 'file',
      url: 'https://gmall-prod.atguigu.cn/mall-api/fileUpload', // 开发者服务器地址
      header: {
        token: getStorage('token')
      },
      success: (res) => {
        const uploadRes = JSON.parse(res.data)
        this.setData({
          'userInfo.headimageurl': uploadRes.data
        })
      }
    })
    第二种方式
     await reqUploadFile(avatarUrl, 'file')
    this.setData({
      'userInfo.headimage': resizeBy.data
    })
3.完成头像更新
复制代码
 // 更新用户信息
  async updateUserInfo() {
    const res = await reqUpdataUserInfo(this.data.userInfo)

    if (res.code === 200) {
      // 存储到本地
      setStorage('userInfo', this.data.userInfo)
      // 同步到store
      this.setUserInfo(this.data.userInfo)
      // 给用户提示
      toast({ title: '用户信息更新成功' })
    }
  },
7.更新用户昵称

需要给input输入框type属性设置为nickname,键盘上方才会显示微信昵称

给input输入框添加name属性,form组件才会自动收集有name属性的表单元素的值

给按钮添加form-type属性,如果值是reset就是重置表单

给按钮添加form-type属性,如果值是submit就是提交按钮

复制代码
 // 获取用户昵称
  getNickname(event) {
    // 结构最新的用户昵称
    const { nickname } = event.detail.value
    this.setData({
      'userInfo.nickname': nickname,
      isShowPopup: false
    })
  },


  // 显示修改昵称弹框
  onUpdateNickName() {
    this.setData({
      isShowPopup: true,
      'userInfo.nickname': this.data.userInfo.nickname
    })
  },
8.定义新参数以及封装接口API
复制代码
import { http } from '../utils/http'
export const reqAddAddress = (data) => {
  return http.post('/userAddress/save, data')
}

export const reqAddressList = () => {
  return http.get('/userAddress/findUserAddress')
}

export const reqAddressInfo = (id) => {
  return http.get('/userAddress/{id}')
}

export const reqUpdateAddress = (data) => {
  return http.post('/userAddress/update')
}

export const reqDelAddress = (id) => {
  return http.get('/userAddress/delete/{id}')
}
9. 收集省市级数据

picker从底部弹起滚动选择器

mode的属性是region弹起的就是省市区选择器

value:要求是一个数组,选中的省市区

复制代码
       <!-- 省市区 -->
            <view class="row">
                <text class="title">所在地区</text>

                <!-- picker从底部弹起滚动选择器 -->
                <!-- mode的属性是region弹起的就是省市区选择器 -->
                <!-- value:要求是一个数组,选中的省市区 -->
                <picker mode="region" value="{{ [provinceName,cityName, districtName] }}" bindchange="onAddressChange">
                    <view class="region" wx:if="provinceName">{{ provinceName + '' + cityName + '' + districtName }}</view>
                    <view class="placeholder" wx:else> 请选择收货人所在地区</view>
                </picker>


  // 省市区选择
  onAddressChange(event) {
    const [provinceName, cityName, districtName] = event.detail.value
    const [provinceCode, cityCode, districtCode] = event.detail.code

    this.setData({
      provinceCode,
      cityCode,
      districtCode,
      provinceName,
      cityName,
      districtName
    })
  }
})
10.收集新增地址及其他请求参数

第一种方式:

给input加name、value和按钮加submit属性才能做出一个能提交的表单。

第二种方式:

简易双向数据绑定

复制代码
// wxml
model:value="{{ name }}

// js
  // 保存收货地址
  saveAddrssForm(event) {
    // 组织参数(完整地址,是否设置为默认值)
    const { provinceName, cityName, districtName, address, isDefault } = this.data

    //最终要发送的请求参数
    const params = {
      ...this.data,
      fullAddress: provinceName + cityName + districtName + address,
      isDefault: isDefault ? 1 : 0
    }
  },
相关推荐
2501_916007473 小时前
Charles中文版抓包工具使用指南 提高API调试和网络优化效率
android·ios·小程序·https·uni-app·iphone·webview
weixin_lynhgworld6 小时前
剧本杀小程序系统开发:推动社交娱乐产业创新发展
小程序·娱乐
你喜欢喝可乐吗?10 小时前
微信小程序与后台管理系统开发全流程指南
spring boot·微信小程序·vue
七七软件开发10 小时前
无人共享 app 系统架构分析
java·python·小程序·系统架构·php
云起SAAS11 小时前
躺平发育小游戏微信抖音流量主小程序开源
小程序·躺平发育小游戏微信抖音流
胡斌附体11 小时前
小程序省市级联组件使用
前端·javascript·小程序·uniapp·picker级联组件
jaqi.l14 小时前
uni-app vue3 小程序接入 aliyun-rtc-wx-sdk
小程序·uni-app·实时音视频
CRMEB定制开发19 小时前
CRMEB会员电商系统集群部署 + 腾讯云日志托管优化方案
微信小程序·公众号商城·商城源码·crmeb·开源商城
weixin_177297220691 天前
短剧小程序系统开发:技术驱动下的内容创新之路
小程序·语音交友