emitter
事件触发器
使用
直接使用
import Emitter from '@miapp/emitter';
const emitter = new Emitter();
emitter.on('select', callback);
emitter.on(['select', 'confirm'], callback);
emitter.on({
'select': selectCallback,
'confirm': confirmCallback
});
emitter.once('select', callback);
emitter.emit('select', { value });
emitter.off('select', callback);
emitter.off('select');
emitter.off();
emitter.destroy();
应用/页面/组件内使用
推荐用 mixinEmitter
,见下文
import Emitter from "@miapp/emitter";
Component({
didMount() {
this.emitter = new Emitter(this);
this.emitter.on('select', (e) => {
console.log(e.src);
});
},
didUnmout() {
this.emitter.destroy();
},
methods: {
handleTap(e) {
this.emit('select', {
src: 'component'
});
}
}
});
Page({
onLoad() {
this.emitter = new Emitter(this);
},
onUnload() {
this.emitter.destroy();
}
});
App({
onLaunch() {
this.emitter = new Emitter(this);
}
});
温馨提示:
- 建议命名为
this.emitter
,内部会有一些相关处理逻辑 - 为了保证通信功能,记得初始化时传入
this
哦 - 页面/组件销毁时记得执行
destroy
方法
mixEmitter
为了解决以上几个问题,更方便的使用方式是,直接扩充应用/页面/组件的方法
import { mixinEmitter } from "@miapp/emitter";
Component(mixinEmitter({
didMount() {
this.on('select', () => {});
},
methods: {
handleTap(e) {
this.emit('select', {
src: 'component'
});
}
}
}));
Page(mixinEmitter({
onLoad() {
this.on('select', () => {});
}
}));
App(mixinEmitter({
onLaunch() {
this.on('select', () => {});
}
}));
通信功能
冒泡
冒泡至页面
this.emit('selected|page', {
src: 'component'
});
this.on('selected', (e) => {
console.log(e.src);
});
同时冒泡到页面和应用
this.emit('selected|app', {
src: 'component'
});
this.on('selected', (e) => {
console.log(e.src);
});
this.on('selected', (e) => {
console.log(e.src);
});
捕获
如果组件想捕获页面或者全局应用发出的事件
this.emit('selected', {
src: 'app'
});
this.emit('selected', {
src: 'page'
});
this.on('selected|page', (e) => {
console.log(e.src);
});
this.on('selected|app', (e) => {
console.log(e.src);
});
组件之间通信
利用页面事件作为中转
this.emit('a:selected|page', {
src: 'a'
});
this.on('a:selected|page', (a) => {
console.log(e.src);
});
事件命名
prefix:event|broadcast
event
: 事件名称prefix
: 自定义组件前缀,用于区分来源,默认为空broadcast
: 监听从页面或者应用触发的事件,或者触发事件传播至页面或应用,只有两个值,page
和 app
,默认为空
开发
yarn
或者 ayarn
(阿里内网)安装依赖- 小程序 IDE 打开组件(下载地址)
更多命令
miapp newbranch
: 新建分支miapp push
: 提交代码miapp prepub
: 预发(发布 beta 版本)miapp publish
: 正式发布