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


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 相关文章推荐
一端时间轮换的广告
Jun 26 Javascript
jQuery下的动画处理总结
Oct 10 Javascript
SeaJS入门教程系列之SeaJS介绍(一)
Mar 03 Javascript
JavaScript中合并数组的N种方法
Sep 16 Javascript
jQuery搜索同辈元素方法
Feb 10 Javascript
JavaScript位移运算符(无符号) &gt;&gt;&gt; 三个大于号 的使用方法详解
Mar 31 Javascript
JS和jQuery使用submit方法无法提交表单的原因分析及解决办法
May 17 Javascript
JavaScript DOM 对象深入了解
Jul 20 Javascript
JS实现点击网页判断是否安装app并打开否则跳转app store
Nov 18 Javascript
BootStrap与Select2使用小结
Feb 17 Javascript
JavaScript数据结构之优先队列与循环队列实例详解
Oct 27 Javascript
用npm-run实现自动化任务的方法示例
Jan 14 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
重料打造自己的“宝马”---第三代
2021/03/02 无线电
php获取CSS文件中图片地址并下载到本地的方法
2014/12/02 PHP
php 读取文件夹下所有图片、文件的实例
2018/10/17 PHP
Laravel5.5 视图 - 创建视图和数据传递示例
2019/10/21 PHP
XMLHTTP 乱码的解决方法(UTF8,GB2312 编码 解码)
2011/01/12 Javascript
有趣的JavaScript数组长度问题代码说明
2011/01/20 Javascript
自己实现string的substring方法 人民币小写转大写,数字反转,正则优化
2012/09/02 Javascript
使用jquery解析XML的方法
2014/09/05 Javascript
jQuery中data()方法用法实例
2014/12/27 Javascript
JavaScript前端图片加载管理器imagepool使用详解
2014/12/29 Javascript
Javascript实现Web颜色值转换
2015/02/05 Javascript
初识Node.js
2015/03/20 Javascript
浅谈$(document)和$(window)的区别
2015/07/15 Javascript
bootstrap基础知识学习笔记
2016/11/02 Javascript
vue 设置proxyTable参数进行代理跨域
2018/04/09 Javascript
vue-router中scrollBehavior的巧妙用法
2018/07/09 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
2019/06/24 Javascript
vue如何限制只能输入正负数及小数
2019/07/04 Javascript
基于wxpython实现的windows GUI程序实例
2015/05/30 Python
Python函数的周期性执行实现方法
2016/08/13 Python
对Python _取log的几种方式小结
2019/07/25 Python
python正则过滤字母、中文、数字及特殊字符方法详解
2020/02/11 Python
matplotlib 对坐标的控制,加图例注释的操作
2020/04/17 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
Html5监听手机摇一摇事件的实现
2019/11/07 HTML / CSS
深深扎根运动世界的生活品牌:Tillys
2017/10/30 全球购物
改变生活的男士内衣:SAXX Underwear
2019/08/28 全球购物
abstract class和interface有什么区别?
2012/01/03 面试题
比较一下entity bean和session bean
2013/12/27 面试题
有个性的自我评价范文
2013/11/15 职场文书
销售经理岗位职责
2014/03/16 职场文书
中学生清明节演讲稿
2015/03/18 职场文书
个人落户申请书怎么写?
2019/06/28 职场文书
Ajax 的初步实现(使用vscode+node.js+express框架)
2021/06/18 Javascript
详解redis在微服务领域的贡献
2021/10/16 Redis
分享MySQL常用 内核 Debug 几种常见方法
2022/03/17 MySQL