微信小程序 onLoad与onShow之间传值「建议收藏」

微信小程序 onLoad与onShow之间传值「建议收藏」在写一个页面的刷新效果,需求是在页面第一次进来时,做出一次数据加载,之后在页面有个评论操作,每次评论成功都将本页的数据进行刷新。考虑到如果刷新都用onLoad()的话,会造成比较大的资源浪费,所以,把需要进行数据刷新的部分放到onShow页面进行刷新。因为我的函数在加载评论数据的时候,需要一个bookid数值,传参到服务器这样才能获取相对应的数据。但是bookid是从上个页面通过option…

大家好,又见面了,我是你们的朋友全栈君。

在写一个页面的刷新效果, 需求是在页面第一次进来时,做出一次数据加载,之后在页面有个评论操作,每次评论成功都将本页的数据进行刷新。

考虑到如果刷新都用onLoad()的话,会造成比较大的资源浪费,所以,把需要进行数据刷新的部分放到onShow页面进行刷新。
因为我的函数在加载评论数据的时候,需要一个bookid数值,传参到服务器这样才能获取相对应的数据。但是bookid是从上个页面通过options传参过来的,而这个参数到onLoad()为止就结束了,无法再其他的地方使用。但是在页面刚进行加载的时候,data中的数据是没有的,也就是说不能通过onLoad()将 data中的数据进行更新,然后在onShow()中进行调用。
这就造成了本页面中onLoad()与onShow()之间无法进行一个有效时间内的数据交流。
所以我想了个比较偷鸡的方法。
直接上代码:

 onLoad:function(options){
    console.log("onload加载刷新");
    var that = this;
    wx.request({
      url: 'https://www.*******.cn/BookStoreProject/public/store.php/getInformation',
      data: { isUser : 0 , bookid : options.bookid},
      method: 'GET', 
      header: { "content-type": "application/json" },
      success: function (res) {
        console.log(res.data[0]);
        var bookurl1 ='imgUrls['+ 0 +']';
        var bookurl2 = 'imgUrls[' + 1 + ']';
        var bookurl3 = 'imgUrls[' + 2 + ']';
        that.setData({
          bookmsg: res.data[0],
          [bookurl1]: res.data[0].pic1_url,
          [bookurl2]: res.data[0].pic2_url,
          [bookurl3]: res.data[0].pic3_url,
        });
        console.log("获取数据成功")
      },
      fail: function (res) {
        console.log("获取数据失败!");
      },
      complete: function () {
        // complete
      }
    });
    that.onShow(options.bookid);
  }

函数内容可以不必理会,只要看最后一句加了that.onShow(options.bookid);
将onLoad接受到的数据传递到了onShow中。
同样的,onShow函数如下需要接收这个数据:

  onShow: function (bookid){
    var that = this;
    // 获取评论,用来刷新,第一次页面初始加载时无法得到执行结果
    wx.request({
      url: 'https://www.***********.cn/BookStoreProject/public/store.php/showComment',
      data: { isUser: 0, bookid: bookid },
      method: 'GET', 
      header: { "content-type": "application/json" }, 
      success: function (res) {
        const temp = res.data;
        for (var i = 0; i < res.data.length; i++) {
          temp[i].comtime = time.formatTimeTwo(temp[i].comtime, "Y/M/D h:m:s");
        }
        temp.reverse();//评论逆序输出
        that.setData({
          comments: temp,
        });
      }
    }); 
  }

可以看到再request请求中,参数bookid被使用到。
从原理上来讲。页面刚进入的时候,执行onLoad,在onLoad中调用onShow。这个时候页面数据被加载好。然后页面正常调用onShow,此时因为没有参数,所以此次onShow会无法得到有效的结果。我将这次的onShow叫做无效加载。
之后每次需要刷新数据的时候,只需要直接调用onShow就可以了。

我突然发现犯了个傻吊的错误,onShow里面的内容可以直接重新写一个函数封装起来啊,然后直接在onLoad里面调用,之后刷新也直接调用就好了。为什么要多次一举写在onShow里面呢???哭辽。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149411.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • EmguCV录制视频

    我所录制的为摄像头的视频:使用的函数为VideoWriter。usingSystem;usingSystem.Drawing;usingSystem.Windows.Forms;usingEmgu.CV;usingEmgu.CV.CvEnum;usingEmgu.CV.Structure;namespaceEmguCVHist{publicpartialc

    2022年4月7日
    45
  • pyqt ui设计_python pyqt5界面开发

    pyqt ui设计_python pyqt5界面开发@[TOC)欢迎使用Markdown编辑器你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Markdown编辑器,可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计,将会带…

    2022年8月28日
    1
  • 在linux中安装nginx可以用哪些命令_acl配置命令

    在linux中安装nginx可以用哪些命令_acl配置命令安装前准备工作因为Nginx依赖于gcc的编译环境,所以,需要安装编译环境来使Nginx能够编译起来yuminstallgcc-c++Nginx的http模块需要使用pcre来解析正则表达式,需要安装pcreyuminstall-ypcrepcre-devel安装依赖的解压包yuminstall-yzlibzlib-develssl功能需要openssl库,安装opensslyuminstall-yopensslopenssl-devel下载Ng

    2022年10月5日
    0
  • 基于Java和MySQL的图书管理系统[通俗易懂]

    Java图书管理系统设计人:wangyunpeng_bio项目需求随着计算机的普及和应用水平的提高,经过考察比较,决定利用自己的Java知识开发小型的图书管理系统,方便图书的管理。图书管理系统是典型的信息管理系统。本次作业利用JAVA开发工具Eclipse和MySQL数据库来开发这个图书管理系统。该系统要解决的图书管理所要解决的问题,可以满足图书管理基本要求,包括添加、管理等功能。…

    2022年4月12日
    117
  • 更新chrome驱动

    更新chrome驱动#chrome会自动更新,驱动则需要跟着更新,驱动新版本下载地址:http://chromedriver.storage.proxy.ustclug.org/index.htmlhttps://npm.taobao.org/mirrors/chromedriver下载下来以后,记得一定要把新的驱动放在python安装目录下,如下图:是否需要放在chrome的安装位置,这个可以试试,目前我没放,也可以使用…

    2022年6月15日
    23
  • 什么是OJ _OJ是什么?[通俗易懂]

    什么是OJ _OJ是什么?[通俗易懂]OnlineJudgeSystem即在线评测系统(以下简称OJ),用户可以在线的提交程序源代码,OJ会对这些源代码进行编译和运行,并且通过每道题目预先设计的数据和时空限制等标准来检验用户程序的正确性。用户提交的程序在OJ下执行的时候会受到严格的限制,包括且不限于时间的限制、内存的限制、系统接口的限制和安全限制。用户程序执行的输出结果会被OJ接收并保存,然后通过裁判程序进行比较用户输出和标…

    2022年6月15日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号