npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@wjtools/uni-router

v1.0.9

Published

一款类似 vue-router 的 uni-app 路由插件

Downloads

2

Readme

uni-router

一款类似 vue-router 的 uni-app 路由插件

本插件修改自 vue-router-uni 和 megalo-router 感谢作者的开源!

版本记录

  • 1.0.7

    fix:兼容百度小程序没有 $mp.page.route 的问题

  • 1.0.2

    fix: 兼容 tabBars 路径不以/开头的配置

  • 1.0.1

    fix: 修复在 app 上的一个兼容问题

  • 1.0.0

    在原插件基础上定制开发

安装

yarn add @wjtools/uni-router

使用

// main.js
import router from '@wjtools/uni-router'

Vue.use(router, {
  mode: 'strict', // loose 模式用 relaunch 跳转 tab 页,可以传参
  tabBars: [
    '/pages/index',
    '/pages/my'
  ]
})

Vue.use 的 option 接受一个 mode 变量,表示路由的模式,有两种模式可选,strict 或者 loose,默认是严格模式

Vue.use 的 option 接受一个 tabBars 变量,为小程序的 tabBar 路径列表

  • strict 严格模式,如果使用 push 或者 replace 携带参数跳转到 tab 页面,将使用 switchTab 进行跳转,此时 tab 页面无法接收到参数,这是小程序自身的限制:switchTab 无法传参
  • loose 宽松模式,如果使用 push 或者 replace 携带参数跳转到 tab 页面,将使用 relaunch 进行跳转,此时 tab 页面可以接收到参数,但是这意味着程序将重新载入

API

支持以下列出的方法及属性

属性

$Router.app

获取全局的 app,相当于 getApp()

在普通页面使用

onLoad() {
  console.log(this.$Router.app)
}

在 App.vue 使用要结合 $Router.ready 使用

  onLaunch() {
    this.$Router.ready(() => {
      console.log(this.$Router.app) // 成功
    })
  }

$Router.currentRoute & $Route

包含如下信息:

{
  query: {} // 页面路由参数
  path: '' // 不带参数的基本路径
  fullPath: '' // 完整路径,带参数
}

在普通页面使用

onReady() {
  console.log(this.$Route.query)
  console.log(this.$Route.path)
  console.log(this.$Route.fullPath)
}

在 App.vue 使用要结合 $Router.ready 使用

  onLaunch() {
    this.$Router.ready(() => {
      console.log(this.$Route) // 成功
      console.log(this.$Router.currentRoute) // 成功
    })
  }

方法

$Router.ready()

接收一个回调函数作为参数

在 App.vue 中获取 $Router.app、$Route 对象或者 $Router.currentRoute,需要调用 $Router.ready

  onLaunch() {
    this.$Router.ready(() => {
      console.log(this.$Router.app) // 成功
      console.log(this.$Route) // 成功

    })
  }

如果在 App.vue 中不使用 $Router.ready方法直接获取 $Router.app 或者 $Route 的话会导致失败,因为此时 Router 并未初始化完成

$Router.push()

打开一个新页面,如果是打开 tabBar 页面,实际是使用 switchTab,否则使用 navigateTo

如果是跳转到 tabBar 页面,是无法进行传参的,如果真的要传参到 tabBar 页面,请使用 relaunch 或者路由模式配置为宽松模式(loose)

  // 使用参数和路径进行跳转
  $Router.push({path: '/pages/index', query: {id: 1}})

  // 或者直接传递一个路径
  $Router.push('/pages/index?id=1')

$Router.replace()

在当前页面打开新页面进行替换,如果是打开 tabBar 页面,实际是使用 switchTab,否则使用 redirectTo

传参方式同 $Router.push

  // 使用参数和路径进行跳转
  $Router.replace({path: '/pages/index', query: {id: 1}})

  // 或者直接传递一个路径
  $Router.replace('/pages/index?id=1')

$Router.go()

回退页面

  $Router.go(-1) // 后退一页
  $Router.go(0) // 重新载入当前页面 相当于 relaunch 当前页面
$Router.back()

回到上一页,同 $Router.go(-1)

$Router.relaunch()

重新载入程序

  // 使用参数和路径进行跳转
  $Router.relaunch({path: '/pages/index', query: {id: 1}})

  // 或者直接传递一个路径
  $Router.relaunch('/pages/index?id=1')

$Router.getPlatform()

获取当前所在平台对象,返回值为一个 Promise

使用方法

async onReady() {
  const platform = await this.$Router.getPlatform()
  console.log(platform)
  // 微信小程序里面得到的是 wx 对象
  // 支付宝小程序里面得到的是 my 对象
}

$Router.platform.ready()

接收一个回调,回调的参数为当前所在平台对象,作用跟 getPlatform 一样,是基于 getPlatform 的封装

使用方法

async mounted() {
  this.$Router.platform.ready(platform => {
    console.log(platform)
  })
}

注意事项

  • 传参问题

    tabBar 页面接收参数的话应该使用 relaunch(小程序自身的限制) 或者开启路由的宽松模式

    如果 query 传参中带有路径或者网址作为参数,请使用 encodeURIComponent 和 decodeURIComponent 进行编码解码,否则可能发生未知错误或者丢参

  • 跳转路径问题

    所有跳转的路径都是使用 '/' 开头的

  • 路由跳转回调问题

    如果需要对跳转的成功或者失败进行回调处理,可以在跳转时候传入回调

    $Router.replace({
      path: '/pages/index',
      query: {id: 1},
      success: res => { console.log('跳转成功', res) },
      fail: err => { console.log('跳转失败', err) },
      complete: res => { console.log('跳转结束', res) }
    })
  • 分包页面的跳转写法

    uni 默认的分包页面之间的跳转比较麻烦,需要写相对路径,例如从 home/index 跳转到 packgeA/pages/a/index,相对路径为 ../../packgeA/pages/a/index

    使用 uni-router 则没有这种烦恼,直接

      $Router.push('/packgeA/pages/a/index')