看到你们还在关注这篇文章,有必要说一句,目前微信已经推出官方组件化解决方案,这个方案已经不适用,详细文档能够移步:小程序组件化。javascript
最近摩拜单车小程序需求愈来愈多,多人协做,甚至多个项目并行。如何合做的更顺畅,提高团队成员开发效率,这即是这段时间思考的问题。前端
其中很重要的一点就是,小程序功能组件化。但小程序的开发框架目前还不支持component,结合具体开发经验,咱们封装了wx-component。java
利用微信小程序支持的template
特性,在page中使用template去调用组件,并把组件的methods
提高到page的属性中去,这样即可以在component中使用bindtap
等绑定组件“私有”事件方法。git
在component的私有方法或onLoad等事件中,可使用parent
获取page对象:github
this.parent.setData({
text: "my btn text"
})
let { text } = this.parent.data
复制代码
你也能够在page中使用childrens
获取component对象:小程序
Page({
data: {},
components: {
login: {
text: "my login btn text",
onLogin() {
...
}
}
},
onLoad() {
this.childrens.login.setData({
text: "my text"
})
let { text } = this.childrens.login.data
}
})
复制代码
在page中声明组件依赖,能够传入props
,如:微信小程序
Page({
data: {},
components: {
// 传入`props`
login: {
text: "my login btn text",
onLogin() {
...
}
}
}
})
复制代码
你能够在component中经过this.props
取到全部的prop值。 固然,小程序不支持props
的概念,全部的props都会合并到data中bash
组件私有的方法,但最终会被合并到page的config属性里,以便于在component的template中调用。微信
wx-component
会从新定义小程序原有的Page
方法,因此你只须要在项目根目录的app.js
中require一次就能够,后续无需从新require:前端工程师
/project/app.js
require("/libs/wx-component/index")
App({
onLaunch() {
...
},
globalData: {
...
}
})
复制代码
这两个事件对应page的onLoad
和onUnload
,但不支持onShow
等其余page事件,你能够在page的onShow
中使用this.childrens
获取组件并调用其私有方法。
├─project 项目
├─components 功能组件
├─login 登陆组件
├─index.wxss
├─index.wxml
├─index.js
├─pages 页面
复制代码
{
// 组件名
// 也能够不填,不填写会用`components/{X}/index.js`中的X命名
name: "login",
// 组件私有数据
data: {
item: [1, 2, 3]
},
// 组件属性
// 能够预先定义默认值
// 也能够外部传入覆盖默认值
props: {
text: "start"
},
// 当组件被加载
onLoad() {
this.setData({
is_loaded: true
})
},
// 当组件被卸载
onUnload() {
this.setData({
is_unloaded: true
})
},
// 组件私有方法
methods: {
getMsg() {
...
},
sendMsg() {
...
}
},
// 其余
....
}
复制代码
更详细的API文档请见Github。
摩拜单车正招聘前端工程师,简历发至:zhangshibing@mobike.com
因为这几乎是以Hack
的方式去解决非静态微信组件化,data、props和methods的merge也会有些混乱,终究只是更方便更快速的解决业务需求。
期待微信小程序团队尽快发布Component
支持。