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


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 相关文章推荐
js数据验证集合、js email验证、js url验证、js长度验证、js数字验证等简单封装
May 15 Javascript
JS trim去空格的最佳实践
Oct 30 Javascript
基于jQuery的简单九宫格实现代码
Aug 09 Javascript
jquery.ajax的url中传递中文乱码问题的解决方法
Feb 07 Javascript
弹出窗口并且此窗口带有半透明的遮罩层效果
Mar 13 Javascript
JavaScript中window.open用法实例详解
Apr 15 Javascript
js省市县三级联动效果实例
Apr 15 Javascript
详解自动生成博客目录案例
Dec 09 Javascript
js实现把图片的绝对路径转为base64字符串、blob对象再上传
Dec 29 Javascript
微信小程序实现缓存根据不同的id来进行设置和读取缓存
Jun 12 Javascript
详解react、redux、react-redux之间的关系
Apr 11 Javascript
深入剖析Node.js cluster模块
May 23 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
PHP 时间转换Unix时间戳代码
2010/01/22 PHP
PHP备份数据库生成SQL文件并下载的函数代码
2012/02/05 PHP
php 批量生成html,txt文件的实现代码
2013/06/26 PHP
zf框架的数据库追踪器使用示例
2014/03/13 PHP
php中substr()函数参数说明及用法实例
2014/11/15 PHP
php实现指定字符串中查找子字符串的方法
2015/03/17 PHP
PHP中JSON的应用技巧
2015/10/10 PHP
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
2016/03/01 PHP
PHP的全局错误处理详解
2016/04/25 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
javascript iframe编程相关代码
2009/12/28 Javascript
IE JS无提示关闭窗口不提示的方法
2010/04/29 Javascript
js实现格式化金额,字符,时间的方法
2015/02/26 Javascript
原生Js实现简易烟花爆炸效果的方法
2015/03/20 Javascript
js实现楼层效果的简单实例
2016/07/15 Javascript
Node.js中使用jQuery的做法
2016/08/17 Javascript
jQuery 出现Cannot read property ‘msie’ of undefined错误的解决方法
2016/11/23 Javascript
angular写一个列表的选择全选交互组件的示例
2018/01/22 Javascript
在antd Form表单中select设置初始值操作
2020/11/02 Javascript
Python中使用异常处理来判断运行的操作系统平台方法
2015/01/22 Python
使用url_helper简化Python中Django框架的url配置教程
2015/05/30 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
Python机器学习之决策树算法
2017/12/22 Python
python实现PID算法及测试的例子
2019/08/08 Python
Python使用Pandas库常见操作详解
2020/01/16 Python
浅谈keras中的目标函数和优化函数MSE用法
2020/06/10 Python
Python sublime安装及配置过程详解
2020/06/29 Python
css3 background属性调整增强介绍
2010/12/18 HTML / CSS
保送生自荐信范文
2013/10/06 职场文书
个人优缺点自我评价
2014/01/27 职场文书
单位委托书怎么写
2014/09/21 职场文书
土建技术员岗位职责
2015/04/11 职场文书
项目投资意向书范本
2015/05/09 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
python 破解加密zip文件的密码
2021/04/22 Python
浅谈JavaScript作用域
2021/12/06 Javascript