Weex与Native交互主要分为两种,全局信息交互与module组件交互
全局信息交互
Native发送消息至Weex 应用场景 比如上传数据 选择原生的图片等上传给Weex 推送的通知消息传递给Weex进行跳转等,全局的推送方法不需要注册module也不需要再前端进行require引入单独的module只需要用全局事件去接收
首先需要@synthesize weexInstance;
来获取当前weexSDK中的instance,通过fireGlobalEvent
方式去传递方法,params可以传递参数
iOS端代码:
[self.weexInstance fireGlobalEvent:@"onErrorData" params:errorData];
Weex端代码:
<script>
const globalEvent = weex.requireModule('globalEvent')
globalEvent.addEventListener('onErrorData', function (params){
console.log(params)
})
</script>
通过module组件的交互
前端调用Native方法分为4种 1.不传参数无回调 2.不传参数有回调 3.传参数无回调 4.传参数有回调
首先Native注册需modul,我是在EMASWXSubSDKEngine
中注册的
[self registerModule:@"RealNameQueryModule" withClass:[RealNameQueryController class]];
暴露出相关方法
前端引用module组件然后直接执行方法
const realNameQueryModule =weex.requireModule('RealNameQueryModule')
1.不传参数无回调
以finishActivity
为例
weex:
/**
关闭当前Native页面
*/
closePage(){
realNameQueryModule.finishActivity()
},
iOS:
// 关闭当前页面
- (void)finishActivity {
[self.navigationController popViewControllerAnimated:YES];
}
2.不传参数有回调
以callQueryListApi
为例,通过weexSDK提供的WXModuleKeepAliveCallback
以callback形式将数据传递过去,weex通过function来接收参数
weex:
realNameQueryModule.callQueryListApi(function (reslut) {
var object = JSON.parse(reslut)
_this.jsonResult=object
_this.list=object["data"]
})
iOS
- (void)callQueryListApi:(WXModuleKeepAliveCallback)callBack {
// 调用网络接口返回数据
[self requestRealNameActionCallback:^(NSString *resObject) {
callBack(resObject, NO);
}];
}
3.传参数有回调
在调用方法的括号以逗号为分隔符一次写入需要传递的参数,native端通过与前端约定的参数形式进行取值
以changeStatusOrData
为例,weex传递两个参数data0,data1
到native,native作出相应处理后通过callback返回数据
weex:
realNameQueryModule.changeStatusOrData(data0,data1,function callback(result){
}
iOS:
// 改变日期状态 0 未实名 1 已实名
- (void)changeStatusOrData:(NSString *)date status:(NSInteger)status callBack:(WXModuleKeepAliveCallback)callBack{
_startTime = [NSString stringWithFormat:@"%@ 00:00:00", date];
_endTime = [NSString stringWithFormat:@"%@ 23:59:59", date];
[self.param setObject:_startTime forKey:@"startTime"];
[self.param setObject:_endTime forKey:@"endTime"];
[self.param setObject:[NSString stringWithFormat:@"%ld", (long)status] forKey:@"status"];
[self requestRealNameActionCallback:^(NSString *resObject) {
callBack(resObject, NO);
}];
}
4.传参数无回调
类似于3,只不过没有callback返回
网友评论