wepy 是一个小程序组件化开发框架。
组件
小程序支持js模块化,但彼此独立,业务代码与交互事件仍需在页面处理。无法实现组件化的松耦合与复用的效果。 例如模板A中绑定一个bindtap=\”myclick\”,模板B中同样绑定一样bindtap=\”myclick\”,那么就会影响同一个页面事件。对于数据同样如此。因此只有通过改变变量或者事件方法,或者给其加不同前缀才能实现绑定不同事件或者不同数据。当页面复杂之后就十分不利于开发维护。 因此wepy让小程序支持组件化开发,组件的所有业务与功能在组件本身实现,组件与组件之间彼此隔离,上述例子在wepy的组件化开发过程中,A组件只会影响到A绑定的myclick,B也如此。
wepy编译组件的过程如下:
组件引用
当页面或者组件需要引入子组件时,需要在页面或者script中的components给组件分配唯一id,并且在template中添加<component>标签,如index.wpy。
页面和组件都可以引入子组件,引入若干组件后,如下图:
Index页面引入A,B,C三个组件,同时组件A和B又有自己的子组件D,E,F,G,H。
项目目录结构
├── dist 微信开发者工具指定的目录├── node_modules ├── src 代码编写的目录| ├── components 组件文件夹(非完整页面)| | ├── com_a.wpy 可复用组件 a| | └── com_b.wpy 可复用组件 b| ├── pages 页面文件夹(完整页面)| | ├── index.wpy 页面 index| | └── page.wpy 页面 page| └── app.wpy 小程序配置项(全局样式配置、声明钩子等)└── package.json package 配置
主要解决问题
- 开发模式转换
- 支持组件化开发
- 支持加载外部 NPM 包
- 单文件模式,使得目录结构更加清晰
- 默认使用 babel 编译,支持 ES6/7 的一些新特性
- 针对原生 API 进行优化
Demo
<style lang=\”less\”> @color: #4D926F; .userinfo { color: @color; }</style><template lang=\”pug\”> view(class=\’container\’) view(class=\’userinfo\’ @tap=\’tap\’) mycom(:prop.sync=\’myprop\’ @fn.user=\’myevent\’) text {{now}}</template><script> import wepy from \’wepy\’; import mycom from \’../components/mycom\’; export default class Index extends wepy.page { components = { mycom }; data = { myprop: {} }; computed = { now () { return new Date().getTime(); } }; async onLoad() { await sleep(3); console.log(\’Hello World\’); } sleep(time) { return new Promise((resolve, reject) => setTimeout(resolve, time * 1000)); } }</script>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。