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

1.WePy项目的目录结构

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

二、实例

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

2.1 App

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

export default class extends wepy.app {
config = {
pages: [ //页面配置
'pages/index/index',
'pages/personals/personal',
],
window: {
backgroundTextStyle: 'light',
navigationBarBackgroundColor: '#a22b00',
navigationBarTitleText: '',
navigationBarTextStyle: 'white'
},
tabBar: { //tab栏
list: [
{
pagePath: 'pages/index/index',
text: '首页',
iconPath: './static/images/icon-index2.png',
selectedIconPath: './static/images/icon-index1.png'
},
{
pagePath: 'pages/personals/personal',
text: '我的',
iconPath: './static/images/icon-my2.png',
selectedIconPath: './static/images/icon-my1.png'
}
],
color: '#000',
borderStyle: 'white',
selectedColor: '#ff5000',
backgroundColor: '#ffffff'
}
};
globalData = {
//全局数据
}; onLaunch() {
//生命周期函数--监听小程序初始化(全局只触发一次)
}; onShow() {
//生命周期函数--监听小程序显示
}; customFunction() {
//自定义方法
}; }

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三个方法用于组件之间的通信和交互。

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

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

import wepy from 'wepy'

export default class Com extends wepy.component {
components = {}; data = {}; methods = { //响应$invoke
funNamet: (p1, p2, $event) => {
//处理逻辑
}
}; // events对象中所声明的函数为用于监听组件之间的通信与交互事件的事件处理函数
events = { //响应$emit、$broadcast
funNamet: (p1, p2, $event) => {
//处理逻辑
}
};
// Other properties
}

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

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

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

四、数据绑定

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

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

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

WePY数据绑定方式

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

this.title = 'this is title';

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

setTimeout(() => {
this.title = 'this is title';
this.$apply();
}, 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. Django学习笔记 (一) 开发环境配置

    Django是一个开放源代码的Web应用框架,由Python写成. 采用了MVC的软件设计模式,即模型M,视图V和控制器C. 1. Python安装 下载地址: http://www.python.o ...

  2. 关于Vue中,$this.router.push到当前页面,只是传入参数不同,页面不刷新的问题解决

    在页面的watch中,监听$router的变化 watch: { $route (to, from) { this.$router.go(0) } } 其中this.$router.go(0)为刷新页 ...

  3. vue函数化组件 functional

    需要在组件中把functional 设置为true 一个函数化组件像这样: Vue.component('testcomponent', { functional: true, // 为了弥补缺少的实 ...

  4. SVN限制IP访问

    转自:https://www.cnblogs.com/wjlkingwjl/p/4630764.html 需求 SVN是放在公网的,需要特别指定公司的IP才能获取操作. 操作 在安装完Visual S ...

  5. 认识和学习redis

    redis VS mysql """ redis: 内存数据库(读写快).非关系型(操作数据方便) mysql: 硬盘数据库(数据持久化).关系型(操作数据间关系) 大量 ...

  6. Tensorflow&CNN:裂纹分类

    版权声明:本文为博主原创文章,转载 请注明出处:https://blog.csdn.net/sc2079/article/details/90478551 - 写在前面 本科毕业设计终于告一段落了.特 ...

  7. Opencv---零碎记录

    OpenCV支持CPU和OpenCL推断,但OpenCL只支持Intel自家GPU,Satya设置了CPU推断模式(cv.dnn.DNN_TARGET_CPU) https://docs.opencv ...

  8. 1204 中间件以及cookie,session

    目录 一 .cookie与session原理 1.cookie 操作 1.1 设置cookie set_cookie 1.2 获取cookie request.COOKIES.get('k1') 1. ...

  9. Java 中待总结工具类学习(自定义注解,读取配置,字面List)

    1.使用 MessageFormat 格式化文本 int planet = 7; String event = "a disturbance in the Force"; Stri ...

  10. region特征

    一: 查看阈值之后的region特征,可以通过特征检测来看,在工具栏上 region特征分三部分: 1.基础特征: region面积,中心,宽高,左上角及右下角坐标,长半轴短半轴椭圆方向,洞数及其面积 ...