现如今mvvm框架如此火热,其核心思想即js逻辑层不直接操作DOM,只改变组件状态;而视图层则通过模板template进行渲染。

1.WePy项目的目录结构

  1. ├── dist 小程序运行代码目录
  2. ├── node_modules 依赖
  3. ├── src 代码编写的目录
  4. | ├── components WePY组件目录
  5. | | ├─- com_a.wpy 可复用的WePY组件a
  6. | | └── com_b.wpy 可复用的WePY组件b
  7. | ├── pages WePY页面目录(属于完整页面)
  8. | | ├── index.wpy index页面
  9. | | └── other.wpy other页面
  10. | └── app.wpy 小程序配置项(全局数据、样式、声明钩子等)
  11. └── package.json 项目的package配置

二、实例

小程序定义了三大实例类,App、Page、Component;

2.1 App

入口文件app.wpy声明的小程序实例继承至wepy.app类,包含小程序的生命周期函数、config配置、全局属性方法及自定义方法。

  1. export default class extends wepy.app {
  2. config = {
  3. pages: [ //页面配置
  4. 'pages/index/index',
  5. 'pages/personals/personal',
  6. ],
  7. window: {
  8. backgroundTextStyle: 'light',
  9. navigationBarBackgroundColor: '#a22b00',
  10. navigationBarTitleText: '',
  11. navigationBarTextStyle: 'white'
  12. },
  13. tabBar: { //tab栏
  14. list: [
  15. {
  16. pagePath: 'pages/index/index',
  17. text: '首页',
  18. iconPath: './static/images/icon-index2.png',
  19. selectedIconPath: './static/images/icon-index1.png'
  20. },
  21. {
  22. pagePath: 'pages/personals/personal',
  23. text: '我的',
  24. iconPath: './static/images/icon-my2.png',
  25. selectedIconPath: './static/images/icon-my1.png'
  26. }
  27. ],
  28. color: '#000',
  29. borderStyle: 'white',
  30. selectedColor: '#ff5000',
  31. backgroundColor: '#ffffff'
  32. }
  33. };
  34. globalData = {
  35. //全局数据
  36. };
  37.  
  38. onLaunch() {
  39. //生命周期函数--监听小程序初始化(全局只触发一次)
  40. };
  41.  
  42. onShow() {
  43. //生命周期函数--监听小程序显示
  44. };
  45.  
  46. customFunction() {
  47. //自定义方法
  48. };
  49.  
  50. }

2.2 Page

page页面继承至wepy.page类,该类主要属性如下:

  • config                页面配置对象,对应于原生的page.json文件;
  • components      页面组件列表对象;
  • data                   页面渲染数据对象,存放可用于页面模板绑定的渲染数据;
  • methods             wxml模板中事件处理函数;
  • events                WePy组件之间通信的函数,响应$broadcast$emit$invoke;
  • 生命周期函数      onLoad、onShow;
  • 自定义方法

2.3 component

components中的组件实例继承wepy.component,本质上page也是component,所以component组件实例除了不需要config配置以及页面特有的一些生命周期函数之外,其属性与页面属性大致相同。

三、组件间的通信

wepy.component基类提供$broadcast$emit$invoke三个方法用于组件之间的通信和交互。

  1. this.$emit(funName,arg1,arg2);

组件间通信的事件处理函数需要写在组件和页面的events对象中,但是$invoke触发的事件在methods中响应:

  1. import wepy from 'wepy'
  2.  
  3. export default class Com extends wepy.component {
  4. components = {};
  5.  
  6. data = {};
  7.  
  8. methods = { //响应$invoke
  9. funNamet: (p1, p2, $event) => {
  10. //处理逻辑
  11. }
  12. };
  13.  
  14. // events对象中所声明的函数为用于监听组件之间的通信与交互事件的事件处理函数
  15. events = { //响应$emit、$broadcast
  16. funNamet: (p1, p2, $event) => {
  17. //处理逻辑
  18. }
  19. };
  20. // Other properties
  21. }

$broadcast事件是由父组件发起,所有子组件都会收到此广播事件,除非事件被手动取消,捕获顺序。

$emit$broadcast正好相反,事件发起组件的所有祖先组件会依次接收到$emit事件,冒泡顺序。

$invoke是一个页面或组件对另一个组件中的方法的直接调用,通过传入组件路径找到相应的组件,然后再调用其方法。

四、数据绑定

原生小程序的数据绑定方式

原生小程序通过Page提供的setData方法来绑定数据,如:

  1. this.setData({title: 'this is title'});

WePY数据绑定方式

Wepy使用脏数据检查对setData进行封装,在函数执行周期结束时进行脏数据检查。一来不用关心页面多次setData是否有性能上的问题;二来可以更加简洁去修改数据实现绑定。

  1. this.title = 'this is title';

值得注意的是,在异步绑定数据时,需要执行$apply()才会触发脏数据检查,

  1. setTimeout(() => {
  2. this.title = 'this is title';
  3. this.$apply();
  4. }, 3000);

WePY脏数据检查流程

在执行脏数据检查时,会通过this.$$phase标识当前检查状态,并且会保证在并发的流程当中,只会有一个脏数据检查流程在运行,以下是执行脏数据检查的流程图:

小程序开发--WePy框架的更多相关文章

  1. 新人学习微信小程序开发之框架篇

    大家好我是智哥,一名专注于前端领域的一名码农. 咱们今天主要来说说微信小程序, 最近一段时间微信群里的小程序,小游戏各种分享是突然一下子就爆发了,现在来看小程序作为微信的重磅功能无疑又是下一个风口.咱 ...

  2. 小程序使用wepy框架自定义loading组件

    1:定义组 <template> <view class="app-loading-container" style="{{options.cssTex ...

  3. 小程序开发:用原生还是选框架(wepy/mpvue/uni-app/taro)?

    小程序开发:用原生还是选框架(wepy/mpvue/uni-app/taro)? 自 2017-1-9微信小程序诞生以来,历经2年多的迭代升级,已有数百万小程序上线,成为继Web.iOS.Androi ...

  4. 用Vue.js开发微信小程序:开源框架mpvue解析

    前言 mpvue 是一款使用 Vue.js 开发微信小程序的前端框架.使用此框架,开发者将得到完整的 Vue.js 开发体验,同时为 H5 和小程序提供了代码复用的能力.如果想将 H5 项目改造为小程 ...

  5. 微信小程序开发库grace vs wepy

    grace和wepy都是辅助小程序开发的开源库,本文对两者做个对比. 注:本文是作者本人的一些拙见,纯粹的技术讨论,不想引起技术信仰之争,欢迎积极.正向的讨论及建议. 如果你还不了解Grace, 请参 ...

  6. 小程序组件化框架 WePY 在性能调优上做出的探究

    作者:龚澄 导语 性能调优是一个亘古不变的话题,无论是在传统H5上还是小程序中.因为实现机制不同,可能导致传统H5中的某些优化方式在小程序上并不适用.因此必须另开辟蹊径找出适合小程序的调估方式. 本文 ...

  7. 小程序开发总结一:mpvue框架及与小程序原生的混搭开发

    mpvue-native:小程序原生和mpvue代码共存 问题描述 mpvue和wepy等框架是在小程序出来一段时间之后才开始有的,所以会出现的问题有:需要兼容已有的老项目,有些场景对小程序的兼容要求 ...

  8. 【微信小程序开发】秒懂,架构及框架

    今天1024程序员节,写文章庆祝!!! 今天的文章是讲微信小程序开发的,按理解把架构与框架说说.有不对之处请大神指点…… 微信小程序与web应用很像,但是原理不同,微信小程序是运行在微信应用内的,不是 ...

  9. 微信小程序开发系列六:微信框架API的调用

    微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发系列四:微信小程序 ...

随机推荐

  1. sqlserver导入Excel数据 总是报错:错误 0xc020901c: 数据流任务 1: 输出“Excel 源输出”(55) 上的 输出列“T2”(64) 出错。返回的列状态是:“文本被截断,或者一个或多个字符在目标代码页中没有匹配项

    在网络上搜索解决办法,解决办法是把excel导入到access数据库中,再把access数据库导入到sqlsever中,公司机器上不让安装office工具,问了一个同事得到的回答是把数据中很长的那行数 ...

  2. 编写Postgres扩展之二:类型和运算符

    原文:http://big-elephants.com/2015-10/writing-postgres-extensions-part-ii/ 编译:Tacey Wong 在上一篇关于编写Postg ...

  3. PC启动过程详解

    系统启动过程 1. 预引导(Pre-Boot)阶段 2. 引导阶段 3. 加载内核阶段 4. 初始化内核阶段 5. 用户登录阶段 基本概念: BIOS:即“Basic Input/Output Sys ...

  4. Arc Engine二次开发——弹窗进行属性查询

    在Arcmap中使用Sapefile格式的矢量数据时,经常会用到其属性查询的功能,弹出窗体然后用户鼠标点击或手动输入查询条件,进而查询到感兴趣的要素.在AE二次开发中也经常需要这个功能,于是在此记录整 ...

  5. UICollectionViewLayout详解,文档翻译

    实现一个UICollectionView,和UITableView类似,不过初始化的时候要传入一个UICollectionViewLayout. 苹果给UIcollectionview中的所有视图都来 ...

  6. awk 概述及常用方法总结

    awk 简介 awk是一个文本处理工具,通常用于处理数据并生成结果报告, awk的命名是它的创始人 Alfred Aho.Peter Weinberger和Brian Kernighan 姓氏的首个字 ...

  7. Linux如何监控每个进程所消耗流量

    查看整个系统的网卡流量使用情况 可以参考下这篇总结比较全面的文章 监控具体的某个进程所消耗的流程 首先,Linux没有自带这样的工具,通过这款第三方开源工具,也是比较好用,如果有其他的办法欢迎留言 # ...

  8. 【DRF框架】版本控制组件

    DRF框架提供的版本控制组件 核心代码:           version, scheme = self.determine_version(request, *args, **kwargs)req ...

  9. Springboot分别使用乐观锁和分布式锁(基于redisson)完成高并发防超卖

    原文 :https://blog.csdn.net/tianyaleixiaowu/article/details/90036180 乐观锁 乐观锁就是在修改时,带上version版本号.这样如果试图 ...

  10. logstash可以考虑在项目中用起来

    在用Node.js开发项目的时候,我们常用 log4js 模块来进行日志的记录,可以通过配置 log4js 的 Appenders 将日志输出到Console.File和GELF等不同的地方. log ...