1 创建收货地址组件
-
在
components目录上鼠标右键,选择新建组件,并填写组件相关的信息:(在cart.vue中使用) -
渲染收货地址组件的基本结构:
2 实现收货地址区域的按需展示
-
在 data 中定义收货地址的信息对象:
-
使用
v-if和v-else实现按需展示:<!-- 选择收货地址的盒子 --> <view class="address-choose-box" v-if="JSON.stringify(address) === '{}'"> <button type="primary" size="mini" class="btnChooseAddress">请选择收货地址+</button> </view> <!-- 渲染收货信息的盒子 --> <view class="address-info-box" v-else> <!-- 省略其它代码 --> </view>
3 实现选择收货地址的功能
-
为
请选择收货地址+的button按钮绑定点击事件处理函数: -
定义
chooseAddress事件处理函数,调用小程序提供的chooseAddress()API 实现选择收货地址的功能: -
定义收货详细地址的计算属性:
-
渲染收货地址区域的数据:
4 将 address 信息存储到 vuex 中
-
在
store目录中,创建用户相关的vuex模块,命名为user.js: -
在
store/store.js模块中,导入并挂载user.js模块: -
改造
address.vue组件中的代码,使用 vuex 提供的 address 计算属性 替代 data 中定义的本地 address 对象:
5 将 Store 中的 address 持久化存储到本地
-
修改
store/user.js模块中的代码如下:
6 将 addstr 抽离为 getters
目的:为了提高代码的复用性,可以把收货的详细地址抽离为 getters,方便在多个页面和组件之间实现复用。
-
剪切
my-address.vue组件中的addstr计算属性的代码,粘贴到user.js模块中,作为一个 getters 节点:(实际就是this换成state) -
改造
my-address.vue组件中的代码,通过mapGetters辅助函数,将m_user模块中的addstr映射到当前组件中使用:
7 重新选择收货地址
- 为 class 类名为
address-info-box的盒子绑定click事件处理函数如下:<!-- 渲染收货信息的盒子 --> <view class="address-info-box" v-else @click="chooseAddress"> <!-- 省略其它代码 --> </view>- 收货地址点击不显示,配置manifest.json
- 收货地址点击不显示,配置manifest.json
8 解决 iPhone 真机上无法重新授权的问题
问题说明:在 iPhone 设备上,当用户取消授权之后,再次点击选择收货地址按钮的时候,无法弹出授权的提示框!
-
导致问题的原因 - 用户取消授权后,再次点击 “选择收货地址” 按钮的时候:
- 在模拟器和安卓真机上,错误消息
err.errMsg的值为chooseAddress:fail auth deny - 在 iPhone 真机上,错误消息
err.errMsg的值为chooseAddress:fail authorize no response
- 在模拟器和安卓真机上,错误消息
-
解决问题的方案 - 修改
chooseAddress方法中的代码,进一步完善用户没有授权时的if判断条件即可:
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 21天,点击查看活动详情