1. 事件的注册
this.$event.on(String type, JSCallback callback) 或 this.$event.once(String type, JSCallback callback)
/**
* 注册一个事件(hello),并设置其回调函数(result)
* 当在其他页面触发该事件时,会执行回调函数的内容
* 分为on()方法和once()方法,两种方法参数相同
* on可回调多次,once仅可回调一次
*
* this.$event.on(String type, JSCallback resultCallback)
* ------type: 要注册事件的名称
* ------resultCallback: 触发该事件后的回调
*/
this.$event.on('hello', result =>{
// on方法可多次触发回调
console.log("heyn123: "+ result.value);
});
this.$event.once('hello', result =>{
// once方法仅能触发一次
console.log("heyn123: "+ result.value);
});
2. 事件的触发
this.$event.emit(String type, String params)
/**
* 事件的触发方法
*
* this.$event.emit(String type, String params)
* -----type:触发的事件
* -----params: 回传的参数
*/
this.$event.emit('hello',{
value: '哈哈哈'
});
3. 在Android端的源码处理概述
通过EventModule.java与JS端完成交互逻辑, 又通过EventCenter中的 on和emit完成相关处理
@Subscribe
public void on(Intent intent) {
// 注册相关事件
if (WXEventCenter.EVENT_JS_ON.equals(intent.getAction())) {
Event event = (Event) intent.getSerializableExtra("data");
List<Event> list = mEvents.get(event.getType());
if (list == null) {
list = new ArrayList<>();
}
list.add(event);
mEvents.put(event.getType(), list);
if (!TextUtils.isEmpty(event.getInstanceId())) {
mWxInstances.add(event.getInstanceId());
}
}
}
@Subscribe
public void emit(Intent intent) {
// 触发相关事件
if (WXEventCenter.EVENT_JS_EMIT.equals(intent.getAction())) {
Log.e("emit", "==========");
Emit emit = (Emit) intent.getSerializableExtra("data");
List<Event> list = mEvents.get(emit.getType());
if (list != null) {
Iterator<Event> iterator = list.iterator();
while (iterator.hasNext()) {
Event event = iterator.next();
if (event.getJsCallback() != null && mWxInstances.contains(event
.getInstanceId())) {
Log.e("test", "emit>>>>>>>" + emit.getParams());
event.getJsCallback().invokeAndKeepAlive(emit.getParams());
if (event.isOnce()) {
iterator.remove();
}
} else {
iterator.remove();
}
}
}
}
}