Wepy预处理数据

作者: kangaroo_v | 来源:发表于2018-09-11 17:44 被阅读0次
    学习是永远学不完的

    大家好,学渣的wepy采坑之路又来啦....还记得当初自己的第一个项目传参的时候 页面之间传值怎么做啊..
    问问度娘 看看小程序的api 噢 很简单啊.. url拼接 和'GET'请求很像嘛...

    //扫码传值 传一堆我也不知道的值...
    wepy.scanCode({}).then(res => {
       wepy.navigateTo({ url: `qrCodeDetail?type=0&codeParam=${res.result}&storeCode=${this.accDetail.storeName[this.storeIndex].storeCode}` })
    })
    
    
    //qrCodeDetail.wpy接
    onLoad(option){
      option.type 巴拉巴拉
    }
    

    是不是很傻...我现在都不知道我传了一堆什么值给qrCodeDetail页面..数据可视化很差.. 如果我传个对象怎么办....

    wepy.navigateTo({ url: `whiteCode?from=${from}&detailObj=${JSON.stringify(this.detailObj)}` })
    

    low不low.....


    言归正传... 今天来聊聊wepy自己封装的 一些数据预处理的用法

    预加载数据
    用于 page1 主动传递数据给 page2,比如 page2 需要加载一份耗时很长的数据。我可以在 page1 闲时先加载好,进入 page2 时直接就可以使用。
    预查询数据
    用于避免于 redirecting 延时,在跳转时调用 page2 预查询。

    我在官网没有看到相关的api..是在别人论坛看到的...
    先搂一眼代码
    aaa页面传值给BBB页面需要的数据

    //aaa.wepy
      data = {
        list:'我是B页面需要的LIST'
    }
      methods = {
        toB(){
          this.$preload('list', this.list)
          wepy.navigateTo({
            url: `bbb?a=111`
          })
        }
    }
    
    //bbb.wepy
    // params 正常跳转的参数
    // data.from: 来源页面,page1
    // data.preload: 预加载数据
      onLoad(params,data) {
        //如果存在
        if(data.preload){
          console.log('获取到aaa页面的值为:' + data.preload,list)
        }
      }
    

    这样当我们从a页面跳转到B的时候 能拿到正常跳转的参数 也可以拿到预处理的参数
    主要是方便数据追踪 当然你也可以使用别的方法
    然而当我们从a页面跳转到b页面的时候 b页面的onLoad执行大概有300毫秒的延迟才会执行 我们可以利用这时间做点自己想做的事情
    这时候就要用到以下两个方法(wepy自行封装的跳转)

    this.$redirect 删除当前页跳转

    this.$navigate 新开一个页面

    使用且只有使用这两种方法做跳转.. 才会触发目标页面的 onPrefetch 钩子函数(wepy封装的)..他的触发时机比onLoad 还要早 他的值需要return出来以后才可以在onLoad中获取 让我们看看例子
    需要注意的是url必须是相对路径

    //aaa.wpy
    methods = {
        go(){
            this.$navigate('./bbb')
        }
    }
    
    //bbb.wpy
    onPrefetch(){
      console.log('触发onPrefetch')
      //这里可以提前调取接口 然后把数据return出去
      return [1,2,3,4,5]
    }
    //data.prefetch: 预查询数据
    onLoad(params,data) {
      data.prefetch  //[1,2,3,4,5]
    }
    

    这样 wepy为我们节约了300ms 鼓掌!!!!
    写的有点混乱 有时间再整理以下


    牛皮

    一个条件渲染不同入口的小技巧

      import wepy from 'wepy'
     export default class Index extends wepy.page {
        config = {
          navigationBarTitleText: '我是B入口'
        }
    
      //预处理数据
      async onPrefetch(){
        let change  = await this.change()
        return new Promise((resolve,reject) =>{
          resolve({
            change
          })
        })
      }
      change(){
        return wepy.request({url:'http://mobile.weather.com.cn/data/sk/101010100.html?_=1381891661455'}).then(res=>{
          return res.data.sk_info.sd
        })
      }
      onLoad(params,data) {
        data
        debugger
        if(data.prefetch){
          data.prefetch.then(list=>{
            this.list = list.change
          })
        }
      }
        data = {
          huhai:'B数据过来了',
          list:null
        }
    
        computed = {
          now () {
            return +new Date()
          }
        }
    
        methods = {
          change(){
            wepy.$event.emit('changeName',this.huhai )
          }
        }
    
    
    
      }
    

    最后自己mark一下大佬的文章
    https://www.colabug.com/2968419.html

    相关文章

      网友评论

        本文标题:Wepy预处理数据

        本文链接:https://www.haomeiwen.com/subject/uriugftx.html