美文网首页微信小程序开发微信小程序开发
小程序开发九:动态首页Home的网络请求和数据加载

小程序开发九:动态首页Home的网络请求和数据加载

作者: Mr姜饼 | 来源:发表于2019-12-16 15:45 被阅读0次

上一节我们介绍了首页的数据绑定,但依然是以假数据的方式来呈现,到了这里,我们将实现动态的加载数据来呈现视图

传送门:


本节重点:动态数据绑定

思路分析
在页面中的每条动态,我们都可以视为一个对象{} , 那么页面中不可能至于一条动态,所以整个页面中,我们定义一个数组的对象,用来接收从服务器获取所有的动态数据,并且进行分配下去,这样就可以展现了。

首先我们在home.js中定义一个空的数组对象“dynamicList”

data: {
    //定义空的数组对象,用来接收从服务器获取的帖子数据
    dynamicList : {}
  },

这里要用网络请求,所以引入“request”的公用的js文件

var requestTool = require("../../utils/request.js") ;

然后我们再定义一个获取数据的函数方法

/**
   * 获取动态列表
   */
  getDynamicListData:function(){
    
    var pathUrl = "/dynamic/page";//请求的参数
    var paraData = {
      size: "10"//一次获取10条数据
    }
    var that = this;//*有回调的地方,记得这样写*为了防止指针指向错误
   requestTool.getRequest(pathUrl, paraData, that.getSuccess, that.getFailed);
  },

  //请求成功的回调参数
  getSuccess:function(data){
    var datas = data;
    var getList = [];
    for(var idx in data.items){
      if(idx > 9){
        break;
      }
      var obj = data.items[idx];
      var dynamicData = obj;
     //这里获取到的日期为时间戳,暂时不做处理,先写死日期,后面再处理
      dynamicData["postDate"] = '2019-09-23';
      getList.push(dynamicData);

    }
    //获取数据后,再次进行数据绑定,这里的操作,会即刻刷新所有绑定了数据的view,即获取到数据后,页面上进行数据填充
    this.setData({
      dynamicList: getList
    });
  },
  //请求失败的回调
  getFailed:function(){
    console.log("qingqiu 失败");
  },

然后我们在onLoad中调用上面的getDynamicListData函数方法:

onLoad: function (options) {
    //从服务器获取数据
    this.getDynamicListData();
  },

编译程序,发现并没有出现正确的显示情况

image.png

查找原因:

1.首先我们来看下是否网络请求成功

image.png

我们发现我们确实从服务器获取到了4条数据,
并且我们将其中一条数据打印显示:

_id :   5de0c096a4a1ef0d19767860
        
user_id :   120207
        
type    :   0
        
status  :   1
        
url :   https://dl.kuwyw.com//tmp/wx644a35bb10d6f345.o6zAJs0O18ah0HvK74PZQvQ3wdvw.KJHOj6VUv1xi249fc60c5edcc34bec139f0d35d4e6ac.png?imageView2/0/q/25|imageslim
        
text    :   人生得意须尽欢 莫使金樽空对月
        
timestamp   :   1575010454149
        
up_count    :   1
        
share_count :   0
        
view_count  :   0
        
comment_count   :   2
        
format  :   https://dl.kuwyw.com//tmp/wx644a35bb10d6f345.o6zAJs0O18ah0HvK74PZQvQ3wdvw.KJHOj6VUv1xi249fc60c5edcc34bec139f0d35d4e6ac.png
        
recommend   :   0
        
is_up   :       false
        
nick_name   :   ice
        
avatar  :   http://pso3htid6.bkt.clouddn.com/defultAvatar.jpg
        
age :   18
        
sex :   0

这里代表网络请求是成功的,

2.数据绑定
我们发现在js中,我们成功的绑定了“dynamicList”的数据,但是我们发现在home.wxml中,我们并没有用到此数据,

接下来我们对home.wxml进行修改:

<view class="innerContainer">
  <block wx:for="{{dynamicList}}">//这里我们用for循环进行数据绑定,即请求到了多少条数据,我们就创建多少个view,并且单个地显示数据
    <view class="dynamicContainer">

      <view class="dynamicTopView">
        <image class="userAvatar" mode="aspectFill" src="{{avatar}}"></image>
        <view class="userNick-postDate">
          <text class="userNick">{{nickName}}</text>
          <text class="postDate">{{postDate}}</text>
        </view>
        <image src="/images/home/moreIcon.png" class="moreIcon"></image>
      </view>

      <text class="contentText"></text>{{content}}

      <image class="contentImg" mode="aspectFill" src="{{contentImage}}"></image>

      <view class="dynamicBottomView">
        <image class="favoriteIcon" src="/images/home/xin.png" mode="aspectFit"></image>
        <text class="favoriteCount">{{likeCount}}</text>
        <image class="commentIcon" src="/images/home/pinglun.png"></image>
        <text class="commentCount">{{commentCount}}</text>
      </view>

      <view class="bottomLine"></view>

    </view>

  </block>


强调说明:

在wxml中绑定的数据的名称,必须 必须 必须和js文件中的字段名称保持一致,如在js文件中的昵称字段为nick_name,那么在wxml中必须也是nick_name,那么我们根据上面请求到的数据结构和具体参数,修改下wxml中绑定的字段名

<view class="innerContainer">

 <block wx:for = "{{dynamicList}}" wx:for-item  = "dynamic">
<view class="dynamicContainer">
    <view class="dynamicTopView">

      <image class="userAvatar" src="{{dynamic.avatar}}" mode="aspectFill"></image>
      <view class="userNick-postDate">
        <text class="userNick" >{{dynamic.nick_name}}</text>
        <text class="postDate">{{dynamic.postDate}}</text>
      </view>
      <image src="/images/home/moreIcon.png" class="moreIcon" ></image>

    </view>
    <text class="contentText">{{dynamic.text}}</text>
    <image class="contentImg"  mode="aspectFill" src="{{dynamic.url}}"></image>
    <view class="dynamicBottomView">

     <image class="favoriteIcon" src="{{dynamic.is_up?'/images/home/love.png' :'/images/home/xin.png'}}" catchtap="upUserTap" mode="aspectFit"  ></image>

     

      <text class="favoriteCount">{{dynamic.up_count}}</text>
      <image class="commentIcon" src="/images/home/pinglun.png"></image>
      <text class="commentCount">{{dynamic.comment_count}}</text>
    </view>
    <view class="bottomLine"></view>


  </view>
 <block wx:for = "{{dynamicList}}" wx:for-item  = "dynamic">

</view>

接下来 我们再次编译运行

image.png

总结:

数据的绑定这块,.js中申请的数据变量和.wxml中绑定的数据变量名称必须保持一致;

下一节:为大家介绍template的使用,

传送门:
十:动态首页Home的模板Template介绍和使用

相关文章

网友评论

    本文标题:小程序开发九:动态首页Home的网络请求和数据加载

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