微信小程序 数据绑定详解及实例


Posted in Javascript onOctober 25, 2016

微信小程序最近要火,火不火看看微信用户就知道了,做前端的朋友可以大展身手,跟上脚步,这里来介绍下微信小程序的数据绑定。

>>>数据视图绑定

做前端开发的同学,尤其是WEB前端,每天都要跟视图打交道,假如你是用过jQuery,你就能体会到jQuery的代码冗余和操作不便性,需要手动管理视图和对象的数据一致性。

以下数据和对象等同。

传统的视图和数据绑定

微信小程序 数据绑定详解及实例

 那么微信小程序是通过什么方法来管理视图和对象绑定的呢?状态模式-单向数据流。

状态模式定义一个对象,这个对象可以通过管理其状态从而使得应用程序作出相应的变化。

微信小程序 数据绑定详解及实例

 简单的讲,对象状态化,只要对象状态发送变化,就通知页面更新视图元素。

三个步奏:

1. 识别哪个UI元素被绑定了相应的对象。
2. 监视对象状态的变化。
3. 将所有变化传播到绑定的视图上。

注意数据流向是单向的,即视图变化不会影响对象状态。

<view> {{ message }} </view>

Page({

 data: {

  message: 'Hello MINA!'

 }

})

就这么简单完成视图跟数据的绑定。

仅仅通过数据更新视图是不够的,用户操作引起视图更新,数据怎么同步呢?

这里要区分的是,用户触发事件不仅要考虑当前UI元素更新,还会通过当前元素更新其他视图。

所以视图上的数据都必须用过事件传递给对象,只有用户操作视图,才能获取到数据,并更新对象状态。
如下图:

微信小程序 数据绑定详解及实例

 什么是『事件』:

事件是视图层到逻辑层的通讯方式。

想知道为什么的童鞋可以了解数据单双向流,这里不介绍了。

再来看视图与视图之间是如何影响?

微信小程序 数据绑定详解及实例

流程说明:

1. 视图A由于用户操作,触发事件A
2. 事件A处理函数中,更新对象A和对象B的状态
3. 由于对象A和B状态变化,通知视图A和B更新

我们以用户登录为例,用户点击(事件A)登录按钮后,把按钮变成禁用不可点(视图A),同时弹出等待框(视图B).
部分代码如下:

<view>
 
  <loading hidden="{{loadingHidden}}">正在登录...</loading>
 
  <button type="primary" size="default" disabled="{{disabled}}" bindtap="loginBtn">数据请求</button>
 
</view>
Page({
 
 data:{
 
  disabled: false,
 
  loadingHidden: true
 
 },
 
 //按钮事件
 
 loginBtn: function(event){
 
  //禁用按钮
 
  this.setData({disabled: true});
 
  //弹出正在登录框
 
  this.setData({loadingHidden: false});
 
 }
 
})

总结:

现在流行数据单双向绑定,小程序使用了单向数据流,如果采用传统的jQuery方式操作数据和视图,开发效率低,开发者不买账。如果采用双向数据流,程序执行效率偏低,而且是逻辑层对象状态不可控。

总体来说,小程序数据视图单向绑定开发模式,让开发者专注于事件处理上,改变对象状态,实现视图更新。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
通过正则格式化url查询字符串实现代码
Dec 28 Javascript
animate 实现滑动切换效果【实例代码】
May 05 Javascript
js基础之DOM中document对象的常用属性方法详解
Oct 28 Javascript
bootstrap栅格系统示例代码分享
May 22 Javascript
vue实现全选和反选功能
Aug 31 Javascript
Javascript获取某个月的天数
May 30 Javascript
详解Element 指令clickoutside源码分析
Feb 15 Javascript
JavaScript实现预览本地上传图片功能完整示例
Mar 08 Javascript
监听element-ui table滚动事件的方法
Mar 26 Javascript
Vue Element UI + OSS实现上传文件功能
Jul 31 Javascript
JavaScript基础之this和箭头函数详析
Sep 05 Javascript
JavaScript实现轮播图效果
Oct 30 Javascript
关于angularJs指令的Scope(作用域)介绍
Oct 25 #Javascript
javascript 中的事件委托详解
Oct 25 #Javascript
js实现控制textarea输入字符串的个数,鼠标按下抬起判断输入字符数
Oct 25 #Javascript
分分钟玩转Vue.js组件
Oct 25 #Javascript
谈谈target=_new和_blank的不同之处
Oct 25 #Javascript
js实现上传图片预览方法
Oct 25 #Javascript
微信小程序(应用号)开发新闻客户端实例
Oct 24 #Javascript
You might like
采用header定义为文件然后readfile下载(隐藏下载地址)
2014/01/31 PHP
PHP实现上传图片到数据库并显示输出的方法
2018/05/31 PHP
Javascript 圆角div的实现代码
2009/10/15 Javascript
js数组Array sort方法使用深入分析
2013/02/21 Javascript
javascript实现跳转菜单的具体方法
2013/07/05 Javascript
innerHTML,outerHTML,innerText,outerText的用法及区别解析
2013/12/16 Javascript
常规表格多表头查询示例
2014/02/21 Javascript
Javascript进制转换实例分析
2015/05/14 Javascript
js的flv视频播放器插件使用方法
2015/06/23 Javascript
Ajax中解析Json的两种方法对比分析
2015/06/25 Javascript
轻松实现js图片预览功能
2016/01/18 Javascript
基于gulp合并压缩Seajs模块的方式说明
2016/06/14 Javascript
jQuery遮罩层实例讲解
2017/05/11 jQuery
jQuery 表单序列化实例代码
2017/06/11 jQuery
浅谈Vue 初始化性能优化
2017/08/31 Javascript
基于Vuex无法观察到值变化的解决方法
2018/03/01 Javascript
vue :src 文件路径错误问题的解决方法
2018/05/15 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
2018/05/28 Javascript
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
2018/01/30 Python
Python-OpenCV基本操作方法详解
2018/04/02 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
使用Python的Django和layim实现即时通讯的方法
2018/05/25 Python
Pandas读取MySQL数据到DataFrame的方法
2018/07/25 Python
Python mutiprocessing多线程池pool操作示例
2019/01/30 Python
django admin.py 外键,反向查询的实例
2019/07/26 Python
Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型
2013/10/30 面试题
软件工程专业推荐信
2013/10/28 职场文书
军训鉴定表自我鉴定
2014/02/13 职场文书
个人授权委托书范文
2014/09/21 职场文书
2014法制宣传日活动总结范文
2014/11/01 职场文书
就业推荐表导师评语
2014/12/31 职场文书
慰问信范文
2015/02/14 职场文书
任命书怎么写
2015/03/02 职场文书
刑事申诉状范文
2015/05/20 职场文书
关于JavaScript回调函数的深入理解
2021/06/27 Javascript
CI Games宣布《堕落之王2》使用虚幻引擎5制作 预计将于2023年正式发售
2022/04/11 其他游戏