WX小程序项目开发(3-状态管理小结

467 阅读3分钟

coderwwh w:what是什么? w:why为什么? h:how怎么样?

路由

比如要实现,从商品列表,点进去进入商品详情页,要注意什么?

  1. 获取该商品对应的id
  2. 获取到这个id,应该是在父组件(商品列表中)点击的时候获取
  3. 点击之后就要跳转,这时候要传值

这里常用的路由是wx.navigateTo(Object object)

保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面。使用 [wx.navigateBack]可以返回到原页面。小程序中页面栈最多十层。

参数

属性类型默认值必填说明
urlstring需要跳转的应用内非 tabBar 的页面的路径 (代码包路径), 路径后可以带参数。参数与路径之间使用 ? 分隔,参数键与参数值用 = 相连,不同参数用 & 分隔;如 'path?key=value&key2=value2'
eventsObject页面间通信接口,用于监听被打开页面发送到当前页面的数据。基础库 2.7.3 开始支持。
successfunction接口调用成功的回调函数
failfunction接口调用失败的回调函数
completefunction接口调用结束的回调函数(调用成功、失败都会执行)

多个请求如何操作?

接上面说的,在子组件里,拿到对应的id,如果要有多个请求,如何操作呢? 图片.png

如图,这样做的弊端是,2得等1,3等2,但是这些数据并无关联的情况下,这样操作大大降低效率

多个请求数据并无关联的情况下,使用promise更加合理

getPageDatafunction(id) {
    // 1.请求播放地址
    getMVURL(id).then(res => {
      this.setData({ mvURLInfo: res.data })
    }) 

    // 2.请求视频信息
    getMVDetail(id).then(res => {
      this.setData({ mvDetail: res.data })
    })

    // 3.请求相关视频
    getRelatedVideo(id).then(res => {
      this.setData({ relatedVideos: res.data })
    })
  }

补充:如果同一个东东(比如都是请求数据),有好几个请求,可以简单抽一下,这样逻辑更加清晰 图片.png

组件库的使用(Vant

  1. 在WX开发者工具里打开终端 npm init -y
  2. npm install @vant/weapp
  3. 工具 --》 构建npm
  4. 想用组件的时候,需要注册
  5. 将 app.json 中的 "style": "v2" 去除

vant-contrib.gitee.io/vant-weapp/…

解决swiper宽度问题

图片.png

首先了解一下 widthFix

原生组件image

图片.png

理想状态是:宽度给100%,高度会自动

但是计算出图片的高度 ,和轮播图的高度 ,会有不一致

轮播图默认有150px的高度,但是这个轮播图的高度不能够是写死的150

轮播图的高度应该与图片高度保持一致,这样的话,那个小点点就会正常显示(内部是根据swiper做了一个定位

要达到这个需求(轮播图高度与图片高度保持一致),面临的问题:

  • 图片高度如何获取?
  • 图片高度也不是固定死的,他是根据宽度widthFix计算出来的,和图片大小有关
  • 能拿到图片计算后的高度,用这个高度,设置轮播图的高度
  • 不能用wxss写这个高度,因为是动态的,必须用行内样式

图片.png

如何获取网络图片的高度?

图片.png 如何知道图片加载完成?

**属性类型默认值必填说明最低版本
bindloadeventhandle当图片载入完毕时触发,event.detail = {height, width}1.0.0

event.detail = {height, width}这里是原始图片宽高

我们要做的是获取image组件的宽高,行为一个大图,被放进去,因为宽度100%,所以高度自动变换

如何去获取某一个组件的高度?

图片.png

图片.png

大功告成!!!

这时候,不论怎么样切换机型,都不会出问题