weexeros js和原生交互之Module拓展2019.3

官方建议:请优先使用官方扩展的 widget,不建议直接使用Module,如果需要直接引用Module的话,一定要自己在封装一层类似我们的 widget,因为原生Module在后续版本中可能会有所修改,统一封装一层对以后升级改动会小一些!

Module 扩展

Module是 js 与 native 交互的机制,比如像页面跳转、网络请求等一些操作,需要 native 通过扩展 Module 的方式提供接口供 js 调用,自定义 module 的步骤:

1.  自定义的module类 必须实现 WXModuleProtocol
2.  必须添加宏WX_EXPORT_METHOD, 它可以被weex识别,它的参数是 JavaScript调用 module指定方法的参数
3.  添加@synthesized weexInstance,每个moudle对象被绑定到一个指定的实例上   
4.  Module 方法会在UI线程中被调用,所以不要做太多耗时的任务在这里,如果要在其他线程执行整个module 方法,需要实现WXModuleProtocol中- (NSThread *)targetExecuteThread的方法,这样,分发到这个module的任务会在指定的线程中运行
5.  Weex 的参数可以是 String 或者Map      
6.  Module 支持返回值给 JavaScript中的回调,回调的类型是      WXModuleCallback,回调的参数可以是String或者Map

官方实例一:网络请求 Module bmAxios
可能 native 端的同学会有疑问,为啥名字是 Axios,因为前端有个著名的网络请求库就叫'Axios',类似于 iOS 端的 AFNetwork,所以为了方便前端同学识别 module 的作用故起名为 bmAxios。
注:两者是不一样的
原生端:
1.1头文件遵守WXModuleProtocol协议

#import <Foundation/Foundation.h>
#import <WeexSDK.h>

@interface BMAxiosNetworkModule : NSObject <WXModuleProtocol>
@end

1.2实现文件

@implementation BMAxiosNetworkModule



// 1.绑定一个 weexInstance 实例
@synthesize weexInstance;

//2.将方法暴露出去,这个一定要添加,不然 js 端调不到这个方法
WX_EXPORT_METHOD(@selector(fetch:callback:))

/**
 3.方法实现

 @param info:js调用方法传递的参数 
 @param callback: 通过callback 将结果数据回传给 js
 */
- (void)fetch:(NSDictionary *)info callback:(WXModuleCallback)callback
{
    /* 添加判断 */
    if (![info isKindOfClass:[NSDictionary class]]) {
        WXLogError(@"js request info Error");
        return;
    }

    // 解析 info
    BMAxiosRequestModel *requestModel = [BMAxiosRequestModel yy_modelWithJSON:info];
    // 创建请求
    BMCommonRequest *api = [[BMCommonRequest alloc] initWithRequestModel:requestModel];

    [((BMBaseViewController *)weexInstance.viewController) addRequest:api];
    // 触发请求
    [api startRequestResult:^(id data) {

        WXLogInfo(@"request data: %@",data);
        // 将数据结果回传给 js
        if (callback) {
            callback(data);
        }

    }];
}

注:callback返回数据格式]

  resData 数据    
  {
     status:0,   //状态码,0表示操作成功 9表示操作失败,数据请求Module bmAxios 此参数为 http请求的状态码如:200、404、503等
    errorMsg: '错误描述信息',
    data: 数据
  }

1.3注册Module


图片.png

1.4在weex使用
1.4.1先引入
var axios = weex.requireModule('bmAxios')
1.4.2调用方法
如:发送请求 fetch(info,callback)

// 示例
axios.fetch({
    method: 'GET'                // 请求类型 GET、POST、HEAD、PUT、DELETE、PATCH
    url: 'http://xxx/xxx',       // 请求api,完整地址
    header: {}                   // 自定义请求头requestHeader
    data: {}                     // 请求参数
    timeout: 3000                // 超时时间(耗秒):默认3000毫秒
}, function(resData){                        
    // resData 数据    
    // {
    //    status:200,   // http 请求状态吗
    //    errorMsg: '错误信息',
    //    data: 数据
    // }
})

官方请优先使用官方扩展的 widget,不建议直接使用Module,如果需要直接引用Module的话,一定要自己在封装一层类似我们的 widget
看下官方封装的widget的Axios.js

解读Axios.js未完待续

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,367评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,959评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,750评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,226评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,252评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,975评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,592评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,497评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,027评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,147评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,274评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,953评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,623评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,143评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,260评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,607评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,271评论 2 358

推荐阅读更多精彩内容