pd-taro-router
v1.0.0
Published
> taro的router, 自动生成对应的页面属性ts和路由拦截
Downloads
2
Readme
pd-taro-router
taro的router, 自动生成对应的页面属性ts和路由拦截
使用
安装
npm i pd-taro-router -D
或改package.json
"pd-taro-router": "git+https://gitee.com/zhengjinpeng/pd-taro-router.git#v1.0.1",
使用插件
/config/index.js
const config = {
plugins: [
["pd-taro-router"]
]
}
根据taro的app.config.ts的注册页面来生成
每个页面里都得加个文件 如首页创建文件/src/pages/index/route.config.ts `` /** 路由url参数 / export type PageParams = { id: number; title: string; }; /* 路由data参数 / export type PageData = { users: { id: number; name: string; sex: "boy" | "girl"; }[]; }; /* 路由返回页面参数 / export type PageBackData = { id: number; name: string; }; /* 路由中间件自定义参数 */ export const middlewareConfig = { mustLogin: true, role: [1, 2, 3], };
生成文件在`/types/taro-route.config.d.ts`
### 编写自定义跳转
重写taro的页面跳转函数
```ts
import Taro, { useRouter } from "@tarojs/taro";
import type { RoutePageData } from "../../types/taro-route.config";
const pages: {
page: string;
data: any;
}[] = [];
const beforePushPage = (routeData: RoutePageData) => {
let url = routeData.url;
let page = "";
if (url.includes("?")) {
page = url.split("?")[0];
} else {
page = url;
}
let params = routeData.params || {};
if (Object.keys(params).length) {
if (!url.includes("?")) {
url += "?";
}
Object.keys(params).forEach((key) => {
let value = params[key];
if (typeof value === "object") {
console.error("params禁止上传对象:"+key);
}
url += `&${key}=${params[key]}`;
});
}
pages.push({
page: page,
data: routeData.data,
});
return {
url,
};
};
export const navigateTo = (routeData: RoutePageData) => {
const { url } = beforePushPage(routeData);
Taro.navigateTo({
url,
success: routeData.success,
fail: (res) => {
routeData.fail?.(res);
pages.pop();
},
});
};