omi/packages/omi-router
dntzhang f96345ae88 update readme 2018-11-07 15:58:41 +08:00
..
examples update package.json 2018-11-07 15:27:40 +08:00
README.CN.md update readme 2018-11-07 15:58:41 +08:00
README.KR.md update omi-router README KR 2018-11-06 23:05:24 +11:00
README.md update readme 2018-11-07 15:58:41 +08:00
index.js update omi-router 2018-11-06 22:25:55 +08:00
package.json update omi-router 2018-11-06 22:25:55 +08:00
webpack.config.js omi-router 2018-11-04 20:01:53 +08:00

README.md

English | 简体中文 | 한국어

omi-router

omi-router is a router plugin of Omi, and it is lightweight, easy and powerful to use. It is a solution to build Omi's SPA(Single Page Application).

→ DEMO

The advantage of SPA is very clear.

  • No refresh to load a content
  • No refresh to previous/forward page
  • Shareable link (Other can see the same page as you see)
  • No blank page and transmission animation
  • Reusable resource (If multi-page, same resource shold be loaded multi times)

Yes, there are many advantages. Let's do it.

Install

NPM

npm install omi-router

Usage

//You can visit route in the global context.
import 'omi-router'
import { define, WeElement, render } from 'omi'
import './about'
import './home'
import './user'
import './user-list'

define('my-app', class extends WeElement {
  static observe = true

  data = { tag: 'my-home' }
  
  install() {

    route('/', () => {
      this.data.tag = 'my-home'
    })

    route('/about', () => {
      this.data.tag = 'my-about'
    })

    route('/user-list', () => {
      this.data.tag = 'user-list'
    })

    route('/user/:name/category/:category', (params) => {
      this.data.tag = 'my-user'
      this.data.params = params
    })

    route('*', function () {
      console.log('not found')
    })

    route.before = (evt) => {
      console.log('before')
      //prevent route when return false
      //return false
    }

    route.after = (evt) => {
      console.log('after')
    }
  }

  onClick = () => {
    route.to('/user/vorshen/category/html')
  }

  render(props, data) {
    return (
      <div>
        <ul>
          <li><a href="#/" >Home</a></li>
          <li><a href="#/about" >About</a></li>
          <li><a href="#/user-list" >UserList</a></li>
        </ul>
        <div id="view">
          <data.tag params={data.params} />
        </div>
        <div><button onClick={this.onClick}>Test route.to</button></div>
      </div>
    )
  }
})

render(<my-app />, "#container")

Match

Rule Path route.params
/user/:name /user/dntzhang { name: 'dntzhang' }
/user/:name/category/:category /user/dntzhang/category/js { name: 'dntzhang', category: js }

License

This content is released under the MIT License.