uni-app中用plus.nativeObj.View创建区块来实现点击某个tabitem时不跳转页面而是做其他操作

需求场景:

利用uni小程序SDK,将原本用uin-app开发的微信小程序嵌入到原生App中;在原生App进入小程序后,tabbar有4个项(首页,XX,XX,我的),但是当点“我的”项的时候,需要跳转到原生App的相应页面。

官网说法:页面简介 | uni-app官网

解决思路及代码:

1.写了个工具函数:utils/robotView.ts

/**
 * “我的”图标上的假图层
 */
//@ts-ignore
// #ifdef APP-PLUS
export const robotView = new plus.nativeObj.View("robot-btn", {
  bottom: "0px", // 底部
  left: "75%", // 控制这个来实现图层左右位置
  height: "50px",  // 高度宽度等可以自己设置
  width: "150px",
  // backgroundColor: "#ff0000", // 一开始设置背景颜色能更清楚调试
});

// 监听图层事件
robotView.addEventListener(
  "click",
  (e) => {
    console.log("向宿主app发送事件,请求打开原生“我的”页面", e); 
    //@ts-ignore
    uni.sendNativeEvent("uni-jump-my");
  },
  false
);
// #endif

2.在每个小程序的tabBar页面的onShow钩子里,都调一下这个函数,并且页面隐藏时,将其隐藏。(除“我的”页面之外的3个页面都要调)

// #ifdef APP-PLUS
import { robotView } from "@/utils/robotView";
// #endif


// #ifdef APP-PLUS
onShow(() => {
  robotView.show();
});
onHide(() => {
  robotView.hide();
});
// #endif

遇到的坑:

一开始有想统一处理,写在App.vue里面,给各种跳转事件添加拦截,去显示或隐藏这个虚拟区块,但是那样会在进入二级页面再返回tabbar页面时或ios左滑返回时有问题,所以就只能在每个tabbar页面单独处理了,所以就提出了一个工具函数。

猜你喜欢

转载自blog.csdn.net/weixin_62192841/article/details/132812933