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


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 相关文章推荐
jQuery编写widget的一些技巧分享
Oct 28 Javascript
javascript中var的重要性分析
Feb 11 Javascript
JavaScript转换二进制编码为ASCII码的方法
Apr 16 Javascript
Backbone中View之间传值的学习心得
Aug 09 Javascript
jquery popupDialog 使用 加载jsp页面的方法
Oct 25 Javascript
使用重写url机制实现验证码换一张功能
Aug 01 Javascript
vue elementui form表单验证的实现
Nov 11 Javascript
vue-router传参用法详解
Jan 19 Javascript
vue实现图片预览组件封装与使用
Jul 13 Javascript
JavaScript 实现同时选取多个时间段的方法
Oct 17 Javascript
d3.js 地铁轨道交通项目实战
Nov 27 Javascript
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
Sep 11 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中strtotime函数使用方法分享
2012/01/10 PHP
php打造属于自己的MVC框架
2012/03/07 PHP
php中return的用法实例分析
2015/02/28 PHP
PHP实现生成带背景的图形验证码功能
2016/10/03 PHP
javascript hashtable实现代码
2009/10/13 Javascript
firefox插件Firebug的使用教程
2010/01/02 Javascript
基于jquery的回到页面顶部按钮
2011/06/27 Javascript
smartcrop.js智能图片裁剪库
2015/10/14 Javascript
功能强大的Bootstrap组件(结合js)
2016/08/03 Javascript
详解Node.Js如何处理post数据
2016/09/19 Javascript
BootStrap的select2既可以查询又可以输入的实现代码
2017/02/17 Javascript
微信小程序 图片宽度自适应的实现
2017/04/06 Javascript
Angular.JS中select下拉框设置value的方法
2017/06/20 Javascript
浅谈vue的几种绑定变量的值 防止其改变的方法
2018/03/01 Javascript
Node.js笔记之process模块解读
2018/05/31 Javascript
使用javascript做时间倒数读秒功能的实例
2019/01/23 Javascript
Node.js实现用户评论社区功能(体验前后端开发的乐趣)
2019/05/09 Javascript
js获取url页面id,也就是最后的数字文件名
2020/09/25 Javascript
[01:10:48]完美世界DOTA2联赛PWL S2 GXR vs PXG 第一场 11.18
2020/11/18 DOTA
python对数组进行反转的方法
2015/05/20 Python
Python subprocess模块详细解读
2018/01/29 Python
pycharm创建一个python包方法图解
2019/04/10 Python
python通过文本在一个图中画多条线的实例
2020/02/21 Python
Selenium alert 弹窗处理的示例代码
2020/08/06 Python
html5教程画矩形代码分享
2013/12/04 HTML / CSS
Java软件工程师综合面试题笔试题
2013/09/08 面试题
初中女生自我鉴定
2013/12/19 职场文书
战略合作意向书范本
2014/04/01 职场文书
文明寄语大全
2014/04/11 职场文书
大学竞选班长演讲稿
2014/04/24 职场文书
吨的认识教学反思
2014/04/27 职场文书
高职教师先进事迹材料
2014/08/24 职场文书
农行心得体会
2014/09/02 职场文书
家长会后的感想
2015/08/11 职场文书
2016全国“质量月”活动标语口号
2015/12/26 职场文书
导游词之无锡梅园
2019/11/28 职场文书