微信小程序 数据交互与渲染实例详解


Posted in Javascript onJanuary 21, 2017

微信小程序 数据交互与渲染

实现效果图:

微信小程序 数据交互与渲染实例详解

微信小程序的api中提供了网络交互的api,我们只要调用即可和后端进行数据交互,该api为wx.request.,具体代码如下。

//list.js 
//获取应用实例 
var app = getApp() 
Page({ 
 data: { 
  list:[], 
  hiddenLoading: true, 
  url: '' 
 }, 
 loadList: function () { 
  var that = this; 
  that.setData({ 
   hiddenLoading: !that.data.hiddenLoading 
  }) 
  var url = app.urls.CloudData.getList; 
  that.setData({ 
   url: url 
  }); 
  wx.request({ 
   url: url, 
   data: {}, 
   method: 'GET', 
   success: function (res) { 
    var list= res.data.list; 
    if (list == null) { 
     list = []; 
    } 
    that.setData({ 
     list: list, 
     hiddenLoading: !that.data.hiddenLoading 
    }); 
     wx.showToast({ 
     title: "获取数据成功", 
     icon: 'success', 
     duration: 2000 
    }) 
   }, 
   fail: function (e) { 
    var toastText='获取数据失败' + JSON.stringify(e); 
    that.setData({ 
     hiddenLoading: !that.data.hiddenLoading 
    }); 
    wx.showToast({ 
     title: toastText, 
     icon: '', 
     duration: 2000 
    }) 
   }, 
   complete: function () { 
    // complete 
   } 
  }), 
 //事件处理函数 
 bindViewTap: function () { 
  wx.navigateTo({ 
   url: '../logs/logs' 
  }) 
 }, 
 onLoad: function () { 
 
 }, 
 onReady: function () { 
  this.loadList(); 
 }, 
 onPullDownRefresh: function () { 
  this.loadList(); 
  wx.stopPullDownRefresh() 
 } 
})

在loadList函数中进行了网络请求,请求的数据放到了data的list中。我们使用setData来修改list,在该函数调用之后,微信小程序的框架就会判断数据状态的变化,然后进行diff判断,如果有变化就渲染到界面中。这个与react.js的渲染方式相似,主要是内部维护了一个类似于虚拟文档的对象,然后通过对虚拟文档的判断来呈现界面,这样可以大大提高性能。

这里我们还做了一个下拉刷新的触发,即onPullDownRefresh函数,为了能够使用下拉刷新,我们需要进行配置,现在我们只需要当前页面生效,所以只要在对应页的json中配置即可,即在list.json中配置。

list.json

{ 
  "navigationBarTitleText": "产品列表",   
  "enablePullDownRefresh":true 
}

如果需要所有的页面的生效,可以在app.json中的window中配置。

app.json

{ 
 "pages":[ 
  "pages/index/index", 
  "pages/logs/logs", 
  "pages/list/list" 
 ], 
 "window":{ 
  "backgroundTextStyle":"light", 
  "navigationBarBackgroundColor": "#fff", 
  "navigationBarTitleText": "WeChat", 
  "navigationBarTextStyle":"black", 
  "enablePullDownRefresh":true 
 } 
}

在app.json中,还有一个pages,我们需要路由的页面都需要在这里注册,否则无法路由到。

在请求数据的时候,加入了等待和获取成功失败的提示。这需要相应的页面配合,页面代码list.wxm.如下

<!--list.wxml--> 
<view class="container container-ext"> 
 <!--默认隐藏--> 
 <loading hidden="{{hiddenLoading}}">正在加载</loading> 
 <scroll-view scroll-y="true"> 
  <view> 
   <block wx:for="{{list}}" wx:key="no"> 
    <view class="widget"> 
     <view> 
      <text >{{item.no}}({{item.content}})</text> 
     </view> 
    </view> 
   </block> 
  </view> 
 </scroll-view> 
</view>
/**list.wxss**/ 
 
.widget { 
 position: relative; 
 margin-top: 5rpx; 
 margin-bottom: 5rpx; 
 padding-top: 10rpx; 
 padding-bottom: 10rpx; 
 padding-left: 40rpx; 
 padding-right: 40rpx; 
 border: #ddd 1px solid; 
}
/**app.wxss**/ 
.container { 
 height: 100%; 
 display: flex; 
 flex-direction: column; 
 align-items: center; 
 justify-content: space-between; 
 box-sizing: border-box; 
 padding-top: 10rpx; 
 padding-bottom: 10rpx; 
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
JS通过分析userAgent属性来判断浏览器的类型及版本
Mar 28 Javascript
对new functionName()定义一个函数的理解
May 22 Javascript
yepnope.js使用详解及示例分享
Jun 23 Javascript
javascript实现tab切换特效
Nov 12 Javascript
javascript轮播图算法
Oct 21 Javascript
深入了解JavaScript的逻辑运算符(与、或)
Dec 20 Javascript
JS获得多个同name 的input输入框的值的实现方法
Jan 09 Javascript
jQuery实现倒计时重新发送短信验证码功能示例
Jan 12 Javascript
基于jquery的on和click的区别详解
Jan 15 jQuery
JavaScript选择排序算法原理与实现方法示例
Aug 06 Javascript
微信小程序 如何保持登录状态
Aug 16 Javascript
Bootstrap实现前端登录页面带验证码功能完整示例
Mar 26 Javascript
前端编码规范(3)JavaScript 开发规范
Jan 21 #Javascript
Bootstrap框架安装使用详解
Jan 21 #Javascript
AngularJS ng-repeat指令中使用track by子语句解决重复数据遍历错误问题
Jan 21 #Javascript
微信小程序 九宫格实例代码
Jan 21 #Javascript
AngularJS的ng-repeat指令与scope继承关系实例详解
Jan 21 #Javascript
巧用canvas
Jan 21 #Javascript
javascript阻止事件冒泡和浏览器的默认行为
Jan 21 #Javascript
You might like
php UTF-8、Unicode和BOM问题
2010/05/18 PHP
php在服务器执行exec命令失败的解决方法
2012/03/03 PHP
php数字游戏 计算24算法
2012/06/10 PHP
php日期转时间戳,指定日期转换成时间戳
2012/07/17 PHP
Windows下php+mysql5.7配置教程
2017/05/16 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
redis+php实现微博(三)微博列表功能详解
2019/09/23 PHP
网站页面自动跳转实现方法PHP、JSP(下)
2010/08/01 Javascript
一行代码告别document.getElementById
2012/06/01 Javascript
jQuery事件 delegate()使用方法介绍
2012/10/30 Javascript
js自定义事件及事件交互原理概述(二)
2013/02/01 Javascript
javascript判断是手机还是电脑访问网页的简单实例分享
2014/06/03 Javascript
javascript下拉列表中显示树形菜单的实现方法
2015/11/17 Javascript
深入理解JavaScript中的并行处理
2016/09/22 Javascript
JavaScript实现经典排序算法之冒泡排序
2016/12/28 Javascript
详解如何在Vue2中实现组件props双向绑定
2017/03/29 Javascript
微信小程序页面传值实例分析
2017/04/19 Javascript
前端构建工具之gulp的配置与搭建详解
2017/06/12 Javascript
JS 中LocalStorage和SessionStorage的使用
2017/08/17 Javascript
node.js多个异步过程中判断执行是否完成的解决方案
2017/12/10 Javascript
在vscode中统一vue编码风格的方法
2018/02/22 Javascript
react中实现搜索结果中关键词高亮显示
2018/07/31 Javascript
记一次用vue做的活动页的方法步骤
2019/04/11 Javascript
Python利用QQ邮箱发送邮件的实现方法(分享)
2017/06/09 Python
定制FileField中的上传文件名称实例
2017/08/23 Python
numpy数组拼接简单示例
2017/12/15 Python
Python基于OpenCV实现人脸检测并保存
2019/07/23 Python
Pycharm中import torch报错的快速解决方法
2020/03/05 Python
python time()的实例用法
2020/11/03 Python
使用phonegap获取设备的一些信息方法
2017/03/31 HTML / CSS
HTML5 实现图片上传预处理功能
2020/02/06 HTML / CSS
工作睡觉检讨书
2014/02/25 职场文书
卫生标语大全
2014/06/21 职场文书
保密工作整改报告
2014/11/06 职场文书
2014年纪检监察工作总结
2014/11/11 职场文书
Python 高级库15 个让新手爱不释手(推荐)
2021/05/15 Python