更新日志
- 新增微信小程序的支持
注意
编译器
4.35及以上版本支持,目前测试过程发现页面中不支持UTSJSONObject的实例方法,可以通过条件编译方式用对应原生语法解决该版本由于刚开通小程序环境,所以可能使用过程会有异常情况,不建议作为生产项目使用。
小程序环境
uni全局挂载使用方式请看 文档
- 优化类型导出,以更好的适配后续版本迭代,升级后页面中所有类型都统一从插件根目录导入,例如:ts
// 升级前 import { RouterOptions, UseAddInterceptorOptions } from '@/uni_modules/kux-router/utssdk/interface'; // 升级后 import { RouterOptions, UseAddInterceptorOptions } from '@/uni_modules/kux-router';
- 优化内部类型导入,以适配
4.33及以上版本编译器。 - 优化其他已知问题。
- 启动拦截场景新增支持
beforeEnter守卫。 - 优化其他已知问题。
修复同一路由多次跳转时,路由参数未更新的问题。
createRouter方法新增useAddInterceptor原生拦截器配置参数,用来支持 uni原生页面跳转 跳转的拦截兼容。具体参数说明如下:- switchTab:是否监听拦截
switchTab跳转,默认值为false。 - navigateTo:是否监听拦截
navigateTo跳转,默认值为false。 - redirectTo:是否监听拦截
redirectTo跳转,默认值为false。 - 示例代码如下:
tsimport { createRouter } from 'kux-router' const router = createRouter({ //... useAddInterceptor: { switchTab: true, navigateTo: true, redirectTo: true } })注意
- 该功能属于实验性功能,可能存在兼容性问题。如遇到问题,请及时反馈给我们。
- switchTab:是否监听拦截
web环境新增支持浏览器输入网址后的拦截跳转。原理是监听
popstate变化,如果发生跳转,则触发router.replace方法。内部vite插件优化调整,具体如下:
- 原来的
vite-plugin-kux-pages-json改名为vite-plugin-kux-gen。 - 新增绑定 kux-autopage 插件,用来做
pages.json类型映射。原来vite-plugin-kux-pages-json对应的生成逻辑由kux-autopages完成。 - 调整后的
vite.config配置如下:
tsimport { defineConfig } from 'vite'; import uni from "@dcloudio/vite-plugin-uni"; import generateUniext from './uni_modules/kux-router/vite/vite-plugin-generate-uniext' import autopages from './uni_modules/kux-autopages' import kuxgen from './uni_modules/kux-router/vite/vite-plugin-kux-gen'; export default defineConfig({ plugins: [ generateUniext, // 该配置为可选项,主要是为了使用uni.xxx的语法 uni(), autopages({ pagesJsonMappingFile: 'router2/pages.uts', // 该参数未配置时,默认在项目根目录下生成 `pages.interface.uts` }), kuxgen({ pagesJsonMappingFile: 'router2/pages.uts', // 该参数同上 routerFile: 'router2/router.uts' // 该参数未配置时,默认在项目根目录下生成 `router.uts` }) ], })- 原来的
- 修复导航守卫因返回
false取消导航插件锁定全局导航导致导航方法全都失效的问题。 - 优化其他已知问题。
- 修复
pagesJsonRouter自动生成condition时缺少逗号导致编译失败的问题。
- 优化
router.uts默认生成逻辑,解决默认生成的内容编译安卓报错的问题。 - 优化
pagesJsonPlugin参数类型,调整为可选参数。 - 优化其他已知问题。
- 修复因自定义
pagesJsonMappingFile导致插件内部interface因类型导入硬编码导致编译失败的问题。 - 插件
interface调整为自动生成,可以根据用户注册配置自动调整类型定义。为后续用户自定义类型注册提供便利。 - 优化其他已知问题。
- 修复
pagesJsonRouter自动生成easycom变量错误的问题。 - 优化
pagesJsonRouter自动生成内容的换行格式。
- 修复自定义目录无法自动创建的问题。
pagesJsonRouter页面映射优化底层实现,调整为自动跟随pages.json变化同步,不再需要重新编译。pagesJsonRouter已支持pages.json的全部内容和类型映射,新增hasTabBar、hasTopWindow、hasLeftWindow、hasRightWindow、hasCondition、hasEasycom、hasUniIdRouter的导出,用来判断pages.json是否设置了tabBar、topWindow、leftWindow、rightWindow、condition、easycom和uniIdRouter等属性。pagesJsonRouter新增导出tabBar、topWindow、leftWindow、rightWindow、condition、easycom、uniIdRouter变量,用来获取pages.json中设置的属性值。pagesJsonRouter新增导出pages.json的属性类型定义,以此来帮助开发者更好地编写pages.json的类型定义。pagesJsonPluginvite插件定义调整为函数形式,并且函数参数新增pagesJsonMappingFile和routerFile,具体说明如下:- pagesJsonMappingFile:
pages.json映射文件路径,默认值为pagesJsonRouter.uts。自定义目录时不能以.开头,否则会影响router中模块的自动导入。具体示例可以参考下面的示例代码。 - routerFile:
router文件路径,默认值为./router.uts。
注意
- 如果自定义了
routerFile路径,则需要在main.uts中同步调整原来router的导入路径。
- pagesJsonMappingFile:
import { defineConfig } from 'vite';
import uni from "@dcloudio/vite-plugin-uni";
import generateUniext from './uni_modules/kux-router/vite/vite-plugin-generate-uniext'
import pagesJsonPlugin from './uni_modules/kux-router/vite/vite-plugin-kux-pages-json';
export default defineConfig({
plugins: [
generateUniext,
uni(),
pagesJsonPlugin,
pagesJsonPlugin({
pagesJsonMappingFile: 'router/pages.uts',
routerFile: 'router/router.uts'
}),
]
})pagesJsonPlugin新增自动生成默认的router.uts路由管理文件,该文件不存在时会自动生成。默认内容如下:ts/** * 路由注册文件,编译时如果该文件不存在会由插件自动生成 * @author kux <kviewui@163.com> * @created 2024-07-30 16:07:00 * @version 1.1.6 * @copyright Copyright (c) 2024 The Authors. * @license MIT License * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ import { pages } from '@/router/pages.uts'; import { RouteRecordNormalized } from '@/uni_modules/kux-router/utssdk/interface'; let routes: RouteRecordNormalized[] = []; pages.map((item) => { // 演示拦截,请根据自己的实际业务逻辑和item内容实现,此处仅作为默认的演示参考 if (item.needLogin) { // 这里是自己的拦截逻辑 } else { routes.push({ path: item.path, name: item.name } as RouteRecordNormalized) } }); export default routes;- 优化其他已知问题。
修复全局导航守卫
beforeEach部分场景会重复跳转的问题。新增
uni全局挂载支持,实现如下:vite.config.ts修改如下:
typescriptimport { defineConfig } from 'vite'; import uni from "@dcloudio/vite-plugin-uni"; import generateUniext from './uni_modules/kux-router/vite/vite-plugin-generate-uniext' import pagesJsonPlugin from './uni_modules/kux-router/vite/vite-plugin-kux-pages-json.ts'; export default defineConfig({ plugins: [ generateUniext, uni(), pagesJsonPlugin ], })- 然后项目中即可直接使用:
uni.useKuxRouter来替代原来的手动导入useRouter。uni.useKuxRoute来替代原来的手动导入useRoute。uni.createKuxRouter来替代原来的手动导入createRouter。
注意
- 上面的
generateUniext为新增的导入模块。模块初始化时会在uni_modules目录下面生成uni-kuxrouter插件,该插件第一次生成时需要编译两次才能正常使用。该插件存在时按照正常的编译一次即可。 - 介意上面第一次需要编译两次的谨慎使用
uni全局挂载方式。
优化其他已知问题。
- 修复全局导航守卫
redirect部分场景会重复跳转的问题。 - 优化全局导航守卫类型规范,以此解决部分场景下类型检查报错的问题。
- 优化其他已知问题。
- 修复全局守卫
beforeEnter异步拦截失效问题。 pagesJsonRouter新增支持pages.json中自带的needLogin,以及自定义的query、meta和data参数。下面以needLogin作为演示,其他参数用法参考该示例即可。 示例如下:pages.json中
needLogin使用示例:pages.json添加needLoginjson"pages": [ { "path" : "pages/demo/indexInterceptor/indexInterceptor", "style" : { "navigationBarTitleText" : "", "enablePullDownRefresh" : false, "navigationStyle": "custom" }, "needLogin": true } ]router路由配置使用tsimport { pages } from '@/pagesJsonRouter'; import { RouteRecordNormalized } from '@/uni_modules/kux-router/utssdk/interface'; let routes: RouteRecordNormalized[] = []; pages.map((item) => { if (item.needLogin == true) { routes.push({ path: item.path, name: item.name, redirect: (_): RouteRecordNormalized | null => { return { name: 'PagesP1Login' } as RouteRecordNormalized } } as RouteRecordNormalized) } else { routes.push({ path: item.path, name: item.name } as RouteRecordNormalized) } })
- 优化过时和非规范语法,以此解决编译期间产生的
warning警告。 - 优化
updateRoute更新路由时偶发的空异常问题。 - 优化其他已知问题。
- 修复编译web端时无法自动生成
pagesJsonRouter.uts的问题。
【重要】底层全面重构,API设计完全对齐 vue-router,基于 uniapp x 的跨平台原生特色新增诸多方便灵活的属性和方法。
【重要】适配兼容ios平台。
【新增】全局导航守卫支持同时设置多个,包括
beforeEach、afterEach导航守卫方法。【新增】
to和from路由属性新增data字段,用来支持路由隐式传参。【新增】
RouteLocationNormalizedLoaded规范化路由信息新增data字段,用来接收路由隐式传参。【新增】
to和from路由属性新增fullPath字段,用来显示当前路由页面带参数的完整地址,如:/pages/user/info?id=1【新增】
RouteLocationNormalizedLoaded规范化路由信息新增name字段,用来显示路由名称或者页面地址别名。【调整️】
fullUrl属性将被废弃,由fullPath属性替代。【新增】
RouteRecordNormalized创建路由表时的路由信息对象参数新增startupIntercept用来支持开启启动拦截,该参数为true时,应用启动时路由守卫就会立即挂载。常用于首页未登录拦截场景。【新增】
RouteRecordNormalized创建路由表时的路由信息对象参数新增animationType参数,用来支持路由跳转时窗口显示的动画类型。动画类型参数参考下面说明。- auto: 自动选择动画效果
- none: 无动画效果
- slide-in-right: 从右侧横向滑动效果
- slide-in-left: 左侧横向滑动效果
- slide-in-top: 从上侧竖向滑动效果
- slide-in-bottom: 从下侧竖向滑动效果
- fade-in: 从透明到不透明逐渐显示效果
- zoom-out: 从小到大逐渐放大显示效果
- zoom-fade-out: 从小到大逐渐放大并且从透明到不透明逐渐显示效果
- pop-in: 从右侧平移入栈动画效果
提示
该属性效果暂时需 uniapp x 官方同步支持。
【新增】
RouteRecordNormalized创建路由表时的路由信息对象参数新增animationDuration参数,用来支持窗口显示动画的持续时间,单位为毫秒。提示
该属性效果暂时需 uniapp x 官方同步支持。
【新增】
useRouter和createRouter实例新增options属性,可以获取创建路由实例时的原始选项参数。【调整️】
afterEach和beforeEach导航守卫新增返回可以移除自身的函数,调用后可以移除该导航守卫。【新增】
useRouter和createRouter实例新增removeBeforeEach方法用来移除所有的beforeEach守卫。【新增】
useRouter和createRouter实例新增onError方法,用来添加一个错误处理器,它会在每次导航遇到未被捕获的错误出现时被调用。其中包括同步和异步被抛出的错误、在任何导航守卫中返回或传入 next 的错误、尝试解析一个需要渲染路由的异步组件时发生的错误。【调整️】
push方法参数类型调整为一个参数,可支持多种参数类型。push (to: RouteRecordName): Promise<NavigationFailure | null>push (to: RouteRecordNormalized): Promise<NavigationFailure | null>
【新增】
useRouter和createRouter实例新增replace方法,程序式地通过替换历史栈中的当前记录来导航到一个新的 URL。参数类型为一个参数,可以支持多种参数类型。replace (to: RouteRecordName): Promise<NavigationFailure | null>replace (to: RouteRecordNormalized): Promise<NavigationFailure | null>
【新增】
useRouter和createRouter实例新增reLaunch方法,关闭所有页面,打开到应用内的某个页面。参数类型为一个参数,可以支持多种参数类型。reLaunch (to: RouteRecordName): Promise<NavigationFailure | null>reLaunch (to: RouteRecordNormalized): Promise<NavigationFailure | null>
【新增】
useRouter和createRouter实例新增switchTab方法,跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。参数类型为一个参数,可以支持多种参数类型。switchTab (to: RouteRecordName): Promise<NavigationFailure | null>switchTab (to: RouteRecordNormalized): Promise<NavigationFailure | null>
【新增】
useRouter和createRouter实例新增resolve方法,用来返回一个路由地址的规范化路由信息。
适配web版本【hbx4.0及以上版本支持】
初始发布
