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


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 相关文章推荐
JavaScript使用prototype定义对象类型
Feb 07 Javascript
jQuery 获取浏览器所在的IP地址的小例子
Nov 08 Javascript
CascadeView级联组件实现思路详解(分离思想和单链表)
Apr 12 Javascript
Window.Open打开窗体和if嵌套代码
Apr 15 Javascript
Bootstrap进度条组件知识详解
May 01 Javascript
jQuery实现广告条滚动效果
Aug 22 jQuery
jQuery 禁止表单用户名、密码自动填充功能
Oct 30 jQuery
Angular4学习笔记router的简单使用
Mar 30 Javascript
vue自定义全局共用函数详解
Sep 18 Javascript
Javascript实现html转pdf高清版(提高分辨率)
Feb 19 Javascript
vue.js实现简单的计算器功能
Feb 22 Javascript
openLayer4实现动态改变标注图标
Aug 17 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 foreach、while性能比较
2009/10/15 PHP
php 安全过滤函数代码
2011/05/07 PHP
PHP中error_reporting()函数的用法(修改PHP屏蔽错误)
2011/07/01 PHP
常见的四种POST 提交数据方式(小总结)
2015/10/08 PHP
JavaScript 对象、函数和继承
2009/07/07 Javascript
基于Jquery的$.cookie()实现跨越页面tabs导航实现代码
2011/03/03 Javascript
jQuery is()函数用法3例
2014/05/06 Javascript
JS实现点击事件统计的简单实例
2016/07/10 Javascript
漂亮! js实现颜色渐变效果
2016/08/12 Javascript
Javascript的动态增加类的实现方法
2016/10/20 Javascript
Bootstrap模态框水平垂直居中与增加拖拽功能
2016/11/09 Javascript
详解React 服务端渲染方案完美的解决方案
2018/12/14 Javascript
基于Vue的商品主图放大镜方案详解
2019/09/19 Javascript
js回调函数仿360开机
2019/12/26 Javascript
JS实现前端动态分页码代码实例
2020/06/02 Javascript
Element Cascader 级联选择器的使用示例
2020/07/27 Javascript
vue中渲染对象中属性时显示未定义的解决
2020/07/31 Javascript
[48:32]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs VG
2018/04/01 DOTA
[51:44]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第二场
2018/04/04 DOTA
浅谈Django中的数据库模型类-models.py(一对一的关系)
2018/05/30 Python
对python借助百度云API对评论进行观点抽取的方法详解
2019/02/21 Python
django将网络中的图片,保存成model中的ImageField的实例
2019/08/07 Python
Python sep参数使用方法详解
2020/02/12 Python
使用CSS3的rem属性制作响应式页面布局的要点解析
2016/05/24 HTML / CSS
整理HTML5中表单的常用属性及新属性
2016/02/19 HTML / CSS
SportsDirect.com马来西亚:英国第一体育零售商
2018/11/21 全球购物
澳大利亚设计师服装在线:MISHA
2019/10/07 全球购物
英国豪华家具和家居用品购物网站:Teddy Beau
2020/10/12 全球购物
银行实习的自我鉴定
2013/12/10 职场文书
旅游项目开发策划书
2014/01/18 职场文书
班长自荐书范文
2014/02/11 职场文书
质检员工作总结2015
2015/04/25 职场文书
如何用python插入独创性声明
2021/03/31 Python
详解python的内存分配机制
2021/05/10 Python
MongoDB orm框架的注意事项及简单使用
2021/06/20 MongoDB
使用CSS自定义属性实现骨架屏效果
2022/06/21 HTML / CSS