singleton-router
v2.0.1
Published
Tiny singleton router for the browser
Downloads
9
Maintainers
Readme
Install
$ npm install --save singleton-router
or
<script type="text/javascript" src="https://unpkg.com/[email protected]/dist/bundle.min.js"></script>
Usage
import SingletonRouter from 'singleton-router'
const router = SingletonRouter()
// each view is a function that returns an htmlElement object
router.addRoute('/', HomeView)
// callback is fired after new element (view) is mounted
router.addRoute('/about', AboutView, () => { console.log('Content mounted to DOM') })
router.addRoute('/user/:id', UserView)
// starting route
router.setRoot('/')
// element to mount router, if not set will mount on body element
router.start('#app')
In your html, any clickeable element with an attribute data-route
would navigate to the route specified there. So, for example, an anchor tag like <a data-route="/about">about</a>
will navigate to the AboutView
.
Programatic navigation can be done with the router.goToPath
function.
API
const router = SingletonRouter([options])
There is a single function exposed, the function returns the instance of the router. The instance is also saved to the global window object as RouterInstance_
. It accepts an optional options
object, the availaible options are:
- onRender(currentView, previousView, cb): By default, the router use the
replaceChild
function to render the view, you can replace it to add animations, or use some html diffing function to improve performance. Notice that the function is ran inside arequestAnimationFrame
call, so don't need to include it yourself. Also, when defined, you get a third parameter, that's the callback defined on eachaddRoute
method. - onNavClick(path, element): If provided, is executed after any element with the
data-route
attribute in it. Useful to markactive
links in navigation menus.
router.setStore(store)
Set a store container, like redux for example. This store is passed to each view.
router.addRoute(path, view [, callback])
Add routes to the router. The arguments are:
path
: A string with the path of the route.view
: A function that returns an HtmlElement, the function hast two arguments:params
: The value of the params for that route.store
: the store object set before byrouter.setStore
.callback
: Optional function that runs after the view is rendered to the DOM. Note that if you define aonRender
function, then you MUST handle yourself this callback.
router.setRoot(path)
Set a starting route
router.goToPath(path [, title])
Programmatically navigates to a route. Optionally add a title for the history
api.
router.start([selector])
Start the router. This function receive a selector to mount the app, if none is provided, it will replace and update the body
od the document.
Licencia
MIT © Yerko Palma.