小程序案例(续集)

192 阅读5分钟

07-弹出层的结构和样式实现

  • HTML结构 image.png
  • 实现对应的样式:少了一个计数器 image.png
  • 引入对应的计数器组件 image.png 效果如下: image.png
  • 实现+1或-1方法 image.png

08-点击购物车去购物车

  • 需求: image.png
  • 给对应的按钮绑定点击事件,如下: image.png
  • 实现上述方法 image.png
  • 之前我们实现的导航守卫是对Tabbar的导航守卫,只有点击tabbar时才能实现守卫。先看一下有没有登录 image.png
  • 没有登录,之前做过路由守卫。下面的守卫代码,只有点击tabbar时才能守卫到 image.png
  • 判断有没有token,若没有就是没登录。看一下本地: image.png
  • 现在我们点击tabbar测试一下 image.png
  • 现在不一样,我们需要在详情页中点击去购物车,我们还需要在详情页中实现守卫 image.png
  • 测试守卫是否OK。 image.png
  • 1s后,就返回到了登录页 image.png

09-登录成功后,返回上一个页面

  • 现在有这样一个问题,我们点击详情页中的购物车,如果没有登录,跳到登录页,现在如果开始登录,关键是登陆完后,跳到什么地方,我们是从详情页点击购物车,由于没有登录,跳到登录页面 image.png
  • 现在点击登录,登录成功后,我们去哪里 image.png
  • 以前的代码,登录成功后在 我的页面 image.png
  • 现在我们从详情页跑到了登录页,登录成功后,还是要回到详情页,也就是上一页。在app.json中定义一个上一页的路径 image.png
  • 在详情页去购物时,需要把这个详情页路径存储起来 prevRoute image.png
  • 登录成功后,我们就需要从全局中获取上面的保存的路径,跳到上面的路径对应的页面 image.png 测试:登录成功后,又跳回详情页。但是有问题,详情页中没有数据 image.png
  • 原因:跳转时,没有传递ID image.png

10-返回上一页面时,带ID

  • 把ID也存在全局中 image.png
  • 在详情页中存储ID image.png
  • 返回上一页时,也需要把ID传过去 image.png 测试:登录后,又回到详情页 image.png

11-并不是每一次都需要返回上一页

  • 编译后,直接点我的,去登录 image.png image.png
  • 不是从详情页过来,就得不到prevRoute和detailId image.png

定义一个状态控制是否返回上一页

  • 并不是每一次都需要返回上一页,定义一个状态,来表示是否需要返回上一页 image.png
  • 在详情页中,需要把这个状态设置成true image.png
  • 登录成功后,就可以做判断 image.png 测试OK。

12-封装成一个返回上一页的工具函数

  • 刚才在点击详情页的购物车时,需要鉴权,我们写了很多代码,如果其他地方也需要鉴权,还需要写一遍。解决方法:把鉴权的代码封装成一个函数
  • 从detail.js中复制鉴权的代码 image.png
  • 在详情页中使用 image.png image.png、 测试OK
  • 封装过,点击收藏按钮也是一样的 image.png 测试OK image.png

13-返回上一页内容补充

  • 现在我们没有登录,不会去点击详情页中的购物车,而是点击tabbar中的购物车 image.png
  • 没有登录,提示请先登录 image.png
  • 因为,我们之前在自定义tabbar中也实现了守卫 image.png
  • 现在我们点击tabbar中的购物车,提示需要登录,登录完后,去购物车。也就是说,此时的上一页并不是详情页,而是购物车。 image.png
  • 测试:登录成功了,但是并没有跳到购物车,也报错了 image.png image.png
  • 分析如下:利用navigateTo是去不到购物车页的 image.png
  • 解决方法:再定义一个全局的状态,表示是否是tabbar页面 image.png
  • 在tabbar页给这个状态赋值 image.png
  • 登录成功后再一次判断 image.png 测试OK。

14-处理详情页中的弹出层

  • 点击购物车中的+1需要把此商品添加到购物车,导入接口 image.png
  • 定义一个状态,获取当前购物车中某个商品的数量 image.png
  • 点击+1或-1就需要给这个状态赋值 image.png
  • 收集到数据后,添加商品到购物车,需要使用这个数量 image.png 代码如下: image.png 结果如下: image.png
  • 然后提示添加购物车成功 image.png 测试: image.png

15-添加购物车时,显示数量

  • 需求: image.png
  • 定义一个状态,表示购物车中商品的数量 image.png
  • 调用完毕后,需要给上面的状态赋值 image.png 测试是否有数据,如下: image.png
  • 然后给购物车添加一个小图标 image.png 这样写,购物车上的图标数量还是0,因此我们需要调用接口,获取数量 image.png
  • 发起ajax请求,获取数量 image.png

16-解决一个小bug

  • 为了防止页面闪一下,登录成功后,添加一个定时器 image.png

06-首页面其他内容渲染

01-分类数据渲染

image.png

  • 确保channel中有数据 image.png
  • 引入组件 image.png
  • 使用组件 image.png

02-品牌机制商实现

  • 对应状态,并赋值 image.png
  • 查看数据 image.png
  • HTML image.png
  • 样式 image.png

03-周一到周四实现

  • 定义状态 image.png
  • 查看数据,确保newGoodsList中有值 image.png
  • HTML渲染数据 image.png

04-人气推荐

  • 定义状态 image.png
  • 查看数据 image.png
  • 渲染数据 image.png

05-专题推荐

  • 定义状态 image.png
  • 查看数据 image.png
  • HTML渲染数据 image.png
  • 样式 image.png

06-居家(两次渲染)

  • 定义状态 image.png
  • 查看数据 image.png
  • HTML渲染(两次for循环) image.png

07-点击商品去详情页+回到顶部

  • 给每个商品绑定点击事件即可

07-专题页数据渲染

01-专题页数据渲染

  • 引入对应的组件 image.png
  • 添加接口 image.png
  • 定义状态 image.png
  • 渲染出HTML中的数据 image.png
  • 报错 image.png
  • 原因:tabbar中多加了.js image.png
  • 效果 image.png
  • 样式 image.png

08-分类页面数据渲染

09-点击首页小分类模块进入二级分类

10-购物车模块实现