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


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 相关文章推荐
jquery1.83 之前所有与异步列队相关的模块详细介绍
Nov 13 Javascript
JS等比例缩小图片尺寸的实例
Feb 27 Javascript
Lua表达式和控制结构学习笔记
Dec 15 Javascript
JavaScript+html5 canvas实现图片破碎重组动画特效
Feb 22 Javascript
简洁实用的BootStrap jQuery手风琴插件
Aug 31 Javascript
javascript鼠标跟随运动3种效果(眼球效果,苹果菜单,方向跟随)
Oct 27 Javascript
vuex实现简易计数器
Oct 27 Javascript
微信小程序 es6-promise.js封装请求与处理异步进程
Jun 12 Javascript
jqueryUI tab标签页代码分享
Oct 09 jQuery
使用vue-router beforEach实现判断用户登录跳转路由筛选功能
Jun 25 Javascript
vue单页应用在页面刷新时保留状态数据的方法
Sep 21 Javascript
浏览器事件循环与vue nextTicket的实现
Apr 16 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
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
2008/11/18 PHP
PHP COOKIE设置为浏览器进程
2009/06/21 PHP
PHP句法规则详解 入门学习
2011/11/09 PHP
PHP将整个网站生成HTML纯静态网页的方法总结
2012/02/05 PHP
深入php var_dump()函数的详解
2013/06/05 PHP
保存到桌面、设为桌面且带图标的PHP代码
2013/11/19 PHP
PHPStrom中实用的功能和快捷键大全
2015/09/23 PHP
js解析json读取List中的实体对象示例
2014/03/11 Javascript
AngularJS 使用$sce控制代码安全检查
2016/01/05 Javascript
js类式继承与原型式继承详解
2016/04/07 Javascript
js select实现省市区联动选择
2020/04/17 Javascript
分享JavaScript监听全部Ajax请求事件的方法
2016/08/28 Javascript
Vue.js使用v-show和v-if的注意事项
2016/12/13 Javascript
nodejs批量下载图片的实现方法
2017/05/19 NodeJs
使用百度地图实现地图网格的示例
2018/02/06 Javascript
Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)
2018/05/04 Javascript
详解vue-cli3使用
2018/08/14 Javascript
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
Python中函数的多种格式和使用实例及小技巧
2015/04/13 Python
Python数据结构之顺序表的实现代码示例
2017/11/15 Python
Python内置函数 next的具体使用方法
2017/11/24 Python
一个Python最简单的接口自动化框架
2018/01/02 Python
Python基于matplotlib实现绘制三维图形功能示例
2018/01/18 Python
Python实现读取字符串按列分配后按行输出示例
2018/04/17 Python
dataframe 按条件替换某一列中的值方法
2019/01/29 Python
pyside+pyqt实现鼠标右键菜单功能
2020/12/08 Python
总结Python图形用户界面和游戏开发知识点
2019/05/22 Python
如何将tensorflow训练好的模型移植到Android (MNIST手写数字识别)
2020/04/22 Python
keras.layer.input()用法说明
2020/06/16 Python
通过代码实例了解Python异常本质
2020/09/16 Python
带你认识HTML5中的WebSocket
2015/05/22 HTML / CSS
阿迪达斯意大利在线商店:adidas意大利
2016/09/19 全球购物
技术总监的工作职责
2013/11/13 职场文书
2014年教师培训的自我评价
2014/01/03 职场文书
瘦西湖导游词
2015/02/03 职场文书
2016年最美孝心少年事迹材料
2016/02/26 职场文书