官方文档中没有描述,是从看sdk源码得知的方法。
- WXNavigatorModule.m
对外开放的有setNavBarRightItem:callback: 方法。 跟随着源码,找到了WXNavigationDefaultImpl.m 中提供的
- (UIView *)barButton:(NSDictionary *)param position:(WXNavigationItemPosition)position
withContainer:(UIViewController *)container {
...
...
[button addTarget:self action:@selector(onClickBarButton:) forControlEvents:UIControlEventTouchUpInside];
...
}
- WXNavigationDefaultImpl.m
此文件中有onClickBarButton 函数的实现
- (void)onClickBarButton:(id)sender {
WXBarButton *button = (WXBarButton *)sender;
if (button.instanceId) {
if (button.nodeRef)
{
[[WXSDKManager bridgeMgr] fireEvent:button.instanceId ref:button.nodeRef type:@"click" params:nil domChanges:nil] ;
}
else
{
NSString *eventType;
switch (button.position) {
case WXNavigationItemPositionLeft:
eventType = @"clickleftitem";
break;
case WXNavigationItemPositionRight:
eventType = @"clickrightitem";
break;
case WXNavigationItemPositionMore:
eventType = @"clickmoreitem";
break;
default:
break;
}
[[WXSDKManager bridgeMgr] fireEvent:button.instanceId ref:WX_SDK_ROOT_REF type:eventType params:nil domChanges:nil];
}
}
}
从源码中可以看出,最终navive端(fireEvent)发送了一个消息到js,而且这个消息需要在根元素中进行扑获,如:
<template>
<div class="wrapper" @clickrightitem="onRightItemClick">
</div>
</template>