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


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 相关文章推荐
jqPlot jquery的页面图表绘制工具
Jul 25 Javascript
关于二级域名下使用一级域名下的COOKIE的问题
Nov 07 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
Apr 18 Javascript
javascript实现日期按月份加减
May 15 Javascript
js实现鼠标点击左上角滑动菜单效果代码
Sep 06 Javascript
bootstrap datetimepicker日期插件超详细使用方法介绍
Feb 23 Javascript
关于vue单文件中引用路径的处理方法
Jan 08 Javascript
babel的使用及安装配置教程
Feb 22 Javascript
浅谈关于vue中scss公用的解决方案
Dec 02 Javascript
原生JavaScript创建不可变对象的方法简单示例
May 07 Javascript
antd多选下拉框一行展示的实现方式
Oct 31 Javascript
Jquery Fade用法详解
Nov 06 jQuery
前端编码规范(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 什么是PEAR?(第二篇)
2009/03/19 PHP
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
2011/11/10 PHP
JavaScript 常见对象类创建代码与优缺点分析
2009/12/07 Javascript
javascript之AJAX框架使用说明
2010/04/24 Javascript
Jquery阻止事件冒泡 event.stopPropagation
2011/12/11 Javascript
利用jQuery实现可以编辑的表格
2014/05/26 Javascript
JavaScript italics方法入门实例(把字符串显示为斜体)
2014/10/17 Javascript
jQuery插件开发的五种形态小结
2015/03/04 Javascript
jQuery焦点控制图层展示延迟隐藏的方法
2015/03/09 Javascript
详解JavaScript操作HTML DOM的基本方式
2015/10/21 Javascript
JavaScript中的事件委托及好处
2016/07/12 Javascript
jQuery在ie6下无法设置select选中的解决方法详解
2016/09/20 Javascript
addEventListener()与removeEventListener()解析
2017/04/20 Javascript
JS实现微信摇一摇原理解析
2017/07/22 Javascript
微信小程序中post方法与get方法的封装
2017/09/26 Javascript
详解使用webpack构建多页面应用
2017/12/21 Javascript
jQuery实现checkbox全选、反选及删除等操作的方法详解
2019/08/02 jQuery
[39:52]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第一场
2018/04/04 DOTA
[56:20]LGD vs VP Supermajor 败者组决赛 BO3 第三场 6.10
2018/07/04 DOTA
Python获取央视节目单的实现代码
2015/07/25 Python
利用标准库fractions模块让Python支持分数类型的方法详解
2017/08/11 Python
Python面向对象程序设计之私有属性及私有方法示例
2019/04/08 Python
python实现可变变量名方法详解
2019/07/01 Python
pytorch 可视化feature map的示例代码
2019/08/20 Python
基于Python采集爬取微信公众号历史数据
2020/11/27 Python
详解Django中的FBV和CBV对比分析
2021/03/01 Python
ParcelABC西班牙:包裹运送和快递服务
2019/12/24 全球购物
澳大利亚家居用品零售商:Harris Scarfe
2020/10/10 全球购物
C语言开发工程师测试题
2016/12/20 面试题
妇科医生自荐信
2013/11/05 职场文书
法律专业应届生自荐信范文
2014/01/06 职场文书
触摸春天教学反思
2014/02/03 职场文书
军训感想500字
2014/02/20 职场文书
乡镇干部个人整改措施思想汇报
2014/10/10 职场文书
承诺函格式模板
2015/01/21 职场文书
golang 实现两个结构体复制字段
2021/04/28 Golang