时间:2021-05-19
一、简述
最近项目组打算引入weex,并选定了一个页面进行试水。页面很简单,主要是获取数据渲染页面,并可以跳转到指定的页面。跟之前使用RN 相比,weex 确实要简单很多。从下图中我们可以看到,weex 页面需要跳转到原生页面,并且跳转到哪个页面我们可能并不能写死。也就是说只要原生页面之前项目中写过了,那么理论上来说使用weex 可以任意调用。那么问题来了,我原来的页面可能只知道名字,我怎么为那个页面传值呢?比如有个页面orderDetailVC ,跳转时需要传入orderId,即orderDetailVC.orderId = @"123";
二、思考
可能最直接的想法就是直接原生给weex 提供一个方法,让weex 传入orderId,然后再push。但是如果明天我们需要跳转到另一个页面merchantDetailVC呢?它需要的不是orderId了,可能是一个merchantId,甚至更多参数。那怎么才能实现任意跳转呢?我的想法是,项目是我写的,需要跳转到哪个类,那么这个类名我肯定是清楚的,并且这个类应该需要什么参数我也是清楚的。只不过我可能不知道怎么用weex 把它参数传过去而已。如果知道了类名就意味着我知道了这个类,我能找到这个类,那么我就知道这个类有哪些属性了,这个类的所有属性我都能拿到,只不过有些是我需要给它赋值的,有些是不需要处理的。
三、实现
整体的思路是:原生给weex 提供一个通用的跳转方法。参数是类名和属性字典。
//控制器相关-(void)pushViewController:(NSString *)vcName param:(NSDictionary *)param;-(void)popViewController;-(void)presentViewController:(NSString *)vcName param:(NSDictionary *)param finish:(WXModuleCallback)callback;-(void)dismissViewController:(WXModuleCallback)callback;提供方法后weex 可以这样调用:
确定了方案之后,剩下唯一的事情就是如何实现给weex 提供的方法。代码如下:
-(void)pushViewController:(NSString *)vcName param:(NSDictionary *)param{ //获取类 Class vcClass = NSClassFromString(vcName); if (vcClass == nil) { return; } BaseViewController *vc = [[vcClass alloc] init]; vc.hidesBottomBarWhenPushed = YES; //属性数量 unsigned int count = 0; //获取属性列表 objc_property_t *plist = class_copyPropertyList(vcClass, &count); for (int i = 0; i<count; i++) { //取出属性 objc_property_t property = plist[i]; //取出属性名称 NSString *propertyName = [NSString stringWithUTF8String:property_getName(property)]; //以这个属性名称作为key ,查看传入的字典里是否有这个属性的value if (param[propertyName]) { [vc setValue:param[propertyName] forKey:propertyName]; } } //释放 free(plist); //获取当前页面控制器 UIViewController *currentVC = [Utils getCurrentVC]; if ([currentVC isKindOfClass:[UINavigationController class]]) { [(UINavigationController *)currentVC pushViewController:vc animated:YES]; }else{ [currentVC.navigationController pushViewController:vc animated:YES]; }}经过小规模自测发现是可以实现需求的。但是由于实现时间不长,可能会有不足之处,请谨慎参考。如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Weex简介Weex是阿里前端技术团队开源额一套跨平台开发方案,能以web的开发体验构建高性能、可扩展的native应用,Weex的页面表示层使用Vue,并遵循
下面对使用JavaScript实现页面定时跳转(也称倒计时跳转)做一下总结,各种定时跳转代码记录如下:(1)使用setTimeout函数实现定时跳转(如下代码要
在注册或登录成功等情况后,由当前页面跳转回到了最开始的页面。点击进入网页或者在移动app内都可以发生页面跳转,可能是跳转到原生网页也可能是跳转至其他网页。 网
微信小程序页面跳转如何实现传值(1)页面跳转如何传值(实现跳转到不同页面)点击页面WXML:加入自定义属性(data-category="{{categoryT
页面之间的跳转可以通过两种方式实现:forward和sendRedirect。 forward:可以在JSP页面中使用,可以在Servlet中实现。 在