1.0.0 • Published 1 year ago
pd-taro-router v1.0.0
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();
},
});
};
1.0.0
1 year ago