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


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+ajax实现鼠标单击修改内容的方法
Jun 27 Javascript
jquery小火箭返回顶部代码分享
Aug 19 Javascript
js实现简单的省市县三级联动效果实例
Feb 18 Javascript
详解AngularJS控制器的使用
Mar 09 Javascript
深入理解JavaScript中的浮点数
May 18 Javascript
关于动态执行代码(js的Eval)实例详解
Aug 15 Javascript
KnockoutJS 3.X API 第四章之数据控制流with绑定
Oct 10 Javascript
JSON 数据详解及实例代码分析
Jan 20 Javascript
Node.JS文件系统解析实例详解
May 15 Javascript
浅谈JS获取元素的N种方法及其动静态讨论
Aug 25 Javascript
jQuery实现菜单的显示和隐藏功能示例
Jul 24 jQuery
浅谈Node新版本13.2.0正式支持ES Modules特性
Nov 25 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 第二节 数据类型之数组
2012/04/28 PHP
php使用websocket示例详解
2014/03/12 PHP
PHP二维数组去重算法
2016/12/17 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
2019/12/12 PHP
javascript 的Document属性和方法集合
2010/01/25 Javascript
jquery multiSelect 多选下拉框
2010/07/09 Javascript
十个迅速提升JQuery性能让你的JQuery跑得更快
2012/12/10 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
js+css实现tab菜单切换效果的方法
2015/01/20 Javascript
jQuery实现从身份证号中获取出生日期和性别的方法分析
2016/02/25 Javascript
JavaScript数据存储 Cookie篇
2016/07/02 Javascript
js 数字、字符串、布尔值的转换方法(必看)
2017/04/07 Javascript
ES6新特性四:变量的解构赋值实例
2017/04/21 Javascript
vue实现百度搜索下拉提示功能实例
2017/06/14 Javascript
vue.js如何将echarts封装为组件一键使用详解
2017/10/10 Javascript
nodejs 十六进制字符串型数据与btye型数据相互转换
2018/07/30 NodeJs
vuejs使用axios异步访问时用get和post的实例讲解
2018/08/09 Javascript
electron实现静默打印的示例代码
2019/08/12 Javascript
[55:44]完美世界DOTA2联赛决赛 FTD vs Phoenix 第二场 11.08
2020/11/11 DOTA
python根据出生日期返回年龄的方法
2015/03/26 Python
浅谈scrapy 的基本命令介绍
2017/06/13 Python
python中文乱码不着急,先看懂字节和字符
2017/12/20 Python
Python实现连接postgresql数据库的方法分析
2017/12/27 Python
Python爬虫的两套解析方法和四种爬虫实现过程
2018/07/20 Python
Python基础类继承重写实现原理解析
2020/04/03 Python
python 使用elasticsearch 实现翻页的三种方式
2020/07/31 Python
iHerb香港:维生素、补充剂和天然保健品
2017/08/01 全球购物
医科学校毕业生自荐信
2013/11/09 职场文书
计算机操作自荐信
2013/12/07 职场文书
审计专业自荐信范文
2014/04/21 职场文书
校庆标语集锦
2014/06/25 职场文书
岗位工作说明书
2014/07/29 职场文书
护士求职自荐信
2015/03/25 职场文书
教师节随笔
2015/08/15 职场文书
基于MySql验证的vsftpd虚拟用户
2021/11/07 MySQL
SpringBoot+Redis实现布隆过滤器的示例代码
2022/03/17 Java/Android