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


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 相关文章推荐
Confirmer JQuery确认对话框组件
Jun 09 Javascript
js中将具有数字属性名的对象转换为数组
Mar 06 Javascript
javascript中parentNode,childNodes,children的应用详解
Dec 17 Javascript
在Ubuntu系统上安装Ghost博客平台的教程
Jun 17 Javascript
JavaScript原生数组Array常用方法
Apr 06 Javascript
微信小程序scroll-view组件实现滚动动画
Jan 31 Javascript
详解自定义ajax支持跨域组件封装
Feb 08 Javascript
详解关于Vue2.0路由开启keep-alive时需要注意的地方
Sep 18 Javascript
8个有意思的JavaScript面试题
Jul 30 Javascript
layui实现鼠标移动到单元格上显示数据的方法
Sep 11 Javascript
通过微信公众平台获取公众号文章的方法示例
Dec 25 Javascript
vue3如何优雅的实现移动端登录注册模块
Mar 29 Vue.js
关于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
sqlyog 中文乱码问题的设置方法
2008/10/19 PHP
php file_get_contents函数轻松采集html数据
2010/04/22 PHP
php如何获取文件的扩展名
2015/10/28 PHP
详解php与ethereum客户端交互
2018/04/28 PHP
PHP从尾到头打印链表实例讲解
2018/09/27 PHP
详解PHP队列的实现
2019/03/14 PHP
修改jquery里的dialog对话框插件为框架页(iframe) 的方法
2010/09/14 Javascript
event.X和event.clientX的区别分析
2011/10/06 Javascript
jquery的ajax和getJson跨域获取json数据的实现方法
2014/02/04 Javascript
自写的jQuery异步加载数据添加事件
2014/05/15 Javascript
从零学JSON之JSON数据结构
2014/05/19 Javascript
JavaScript中window.open用法实例详解
2015/04/15 Javascript
js实现选中页面文字将其分享到新浪微博
2015/11/05 Javascript
详解angularjs 学习之 scope作用域
2018/01/15 Javascript
浅谈手写node可读流之流动模式
2018/06/01 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【圆形情况】
2018/12/13 Javascript
NodeJS模块与ES6模块系统语法及注意点详解
2019/01/04 NodeJs
vue实现几秒后跳转新页面代码
2020/09/09 Javascript
JavaScript中遍历的十种方法总结
2020/12/15 Javascript
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
2018/01/07 Python
PyQt5每天必学之创建窗口居中效果
2018/04/19 Python
解决python ogr shp字段写入中文乱码的问题
2018/12/31 Python
Python基于plotly模块实现的画图操作示例
2019/01/23 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
Python之time模块的时间戳,时间字符串格式化与转换方法(13位时间戳)
2019/08/12 Python
python获取array中指定元素的示例
2019/11/26 Python
美国女孩服装购物网站:Justice
2017/03/04 全球购物
美国受信赖的教育产品供应商:Nest Learning
2018/06/14 全球购物
斯洛伐克香水和化妆品购物网站:Parfemy-Elnino.sk
2020/01/28 全球购物
shallow copy和deep copy的区别
2016/05/09 面试题
职工运动会邀请函
2014/02/02 职场文书
彩妆大赛策划方案
2014/05/13 职场文书
通信工程求职信
2014/07/16 职场文书
2014年国庆节广播稿
2014/09/19 职场文书
2015商场元旦促销活动策划方案
2014/12/09 职场文书
2015年教师节感恩寄语
2015/03/23 职场文书