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


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,Extjs,YUI,Prototype,Dojo 等JS框架的区别和应用场景简述
Apr 15 Javascript
JS实现div内部的文字或图片自动循环滚动代码
Apr 19 Javascript
获得Javascript对象属性个数的示例代码
Nov 21 Javascript
点击标签切换和自动切换DIV选项卡
Aug 10 Javascript
JS实现的仿东京商城菜单、仿Win右键菜单及仿淘宝TAB特效合集
Sep 28 Javascript
js弹出窗口返回值的简单实例
May 28 Javascript
JS 实现导航菜单中的二级下拉菜单的几种方式
Oct 31 Javascript
ES6入门教程之Iterator与for...of循环详解
May 17 Javascript
微信小程序实现导航栏选项卡效果
Jun 19 Javascript
javascript+HTML5 canvas绘制时钟功能示例
May 15 Javascript
JS实现选项卡效果的代码实例
May 20 Javascript
Bootstrap告警框(alert)实现弹出效果和短暂显示后上浮消失的示例代码
Aug 27 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
一个用于MySQL的PHP XML类
2006/10/09 PHP
mysql,mysqli,PDO的各自不同介绍
2012/09/19 PHP
php删除字符串末尾子字符,删除开始字符,删除两端字符(实现代码)
2013/06/27 PHP
zend Framework中的Layout(模块化得布局)详解
2013/06/28 PHP
PHP使用逆波兰式计算工资的方法
2015/07/29 PHP
PHP二进制与字符串之间的相互转换教程
2016/10/14 PHP
PHP中常用的魔术方法
2017/04/28 PHP
几个javascript操作word的参考代码
2009/10/26 Javascript
JavaScript设计模式之建造者模式介绍
2014/12/28 Javascript
jQuery中append()方法用法实例
2015/01/08 Javascript
jQuery实现跟随鼠标运动图层效果的方法
2015/02/02 Javascript
jQuery的基本概念与高级编程
2015/05/14 Javascript
JQUERY表单暂存功能插件分享
2016/02/23 Javascript
js 实现数值的千分位及保存小数方法(推荐)
2016/08/01 Javascript
微信小程序组件 contact-button(客服会话按钮)详解及实例代码
2017/01/10 Javascript
Node.js Express 框架 POST方法详解
2017/01/23 Javascript
一道面试题引发的对javascript类型转换的思考
2017/03/06 Javascript
webpack多页面开发实践
2017/12/18 Javascript
vue集成kindeditor富文本的实现示例代码
2019/06/07 Javascript
vue中keep-alive,include的缓存问题
2019/11/26 Javascript
JS实现悬浮球只在一侧滑动并且是横屏状态下
2020/08/19 Javascript
使用原生javascript开发计算器实例代码
2021/02/21 Javascript
让你Python到很爽的加速递归函数的装饰器
2019/05/26 Python
Pandas_cum累积计算和rolling滚动计算的用法详解
2019/07/04 Python
基于python实现判断字符串是否数字算法
2020/07/10 Python
Python异常处理机制结构实例解析
2020/07/23 Python
python 爬取B站原视频的实例代码
2020/09/09 Python
中国综合网上购物商城:苏宁易购
2016/08/09 全球购物
俄罗斯品牌服装在线商店:VIPAVENUE
2020/08/10 全球购物
药剂学专业应届生自荐信
2013/09/29 职场文书
留学生如何写好自荐信
2013/12/27 职场文书
师范教师专业大学生职业生涯规划范文
2014/03/02 职场文书
马丁路德金演讲稿
2014/05/19 职场文书
三月雷锋月活动总结
2014/07/03 职场文书
大学毕业生管理学求职信
2014/09/01 职场文书
Golang并发工具Singleflight
2022/05/06 Golang