日常收录

Weex与iOS交互

2020-02-12  本文已影响0人  枫叶风

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返回

上一篇下一篇

猜你喜欢

热点阅读