omi-router

omi-router是 Omi 专属的router插件,文件尺寸轻量,使用简便,功能强大。用于Omi制作Web单页应用的首选解决方案。

→ DEMO

单页的好处也是非常明显:

  • 无刷新加载页面内容
  • 无刷新前进和后退页面
  • 路由中的某个链接的传播和分享(别人看到的和你一样的状态)
  • 转场动画(a标签跳转不仅要白屏,而且没有转场动画)
  • 资源复用(单页中的许多资源一定是可以共用的,最典型的比如omi.js,如果不是单页的话,你需要加载多次)

好了,好处这么多,看看怎么安装使用吧~~

安装

NPM

  1. npm install omi-router

开始

  1. //你可以在全局访问到 route
  2. import 'omi-router'
  3. import { define, WeElement, render } from 'omi'
  4. import './about'
  5. import './home'
  6. import './user'
  7. import './user-list'
  8. define('my-app', class extends WeElement {
  9. static observe = true
  10. data = { tag: 'my-home' }
  11. install() {
  12. route('/', () => {
  13. this.data.tag = 'my-home'
  14. })
  15. route('/about', (evt) => {
  16. console.log(evt.query)
  17. this.data.tag = 'my-about'
  18. })
  19. route('/user-list', () => {
  20. this.data.tag = 'user-list'
  21. })
  22. route('/user/:name/category/:category', (evt) => {
  23. this.data.tag = 'my-user'
  24. this.data.params = evt.params
  25. })
  26. route('*', function () {
  27. console.log('not found')
  28. })
  29. route.before = (evt) => {
  30. console.log('before')
  31. //prevent route when return false
  32. //return false
  33. }
  34. route.after = (evt) => {
  35. console.log('after')
  36. }
  37. }
  38. onClick = () => {
  39. route.to('/user/vorshen/category/html')
  40. }
  41. render(props, data) {
  42. return (
  43. <div>
  44. <ul>
  45. <li><a href="#/" >Home</a></li>
  46. <li><a href="#/about" >About</a></li>
  47. <li><a href="#/user-list" >UserList</a></li>
  48. <li><a href="#/about?name=dntzhang&age=18" >About Dntzhang</a></li>
  49. </ul>
  50. <div id="view">
  51. <data.tag params={data.params} />
  52. </div>
  53. <div><button onClick={this.onClick}>Test route.to</button></div>
  54. </div>
  55. )
  56. }
  57. })
  58. render(<my-app />, "#container")

动态匹配

模式 匹配路径 route.params
/user/:name /user/dntzhang { name: 'dntzhang' }
/user/:name/category/:category /user/dntzhang/category/js { name: 'dntzhang', category: js }

另一种携带查询参数方法

  1. <li><a href="#/about?name=dntzhang&age=18" >About</a></li>
  1. route('/about', (evt) => {
  2. //点击上面的标签会输出 { name: 'dntzhang', age : '18' }
  3. console.log(evt.query)
  4. })

地址

License

This content is released under the MIT License.