1.0.0 • Published 1 year ago

pd-taro-router v1.0.0

Weekly downloads
-
License
MIT
Repository
-
Last release
1 year ago

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