push-router

Client side router for Single Page Application (SPA)

Usage no npm install needed!

<script type="module">
  import pushRouter from 'https://cdn.skypack.dev/push-router';
</script>

README

spa-router

Client side router for Single Page Application (SPA)

Router uses history API so even tho it is client side router (doesn't do page reload) doesn't use hashes (#) but slashes(/).

This project is working but it is still in development. When it becames stable version will changed to 1.

If you are using this router and notice anything to be improved please do send feedback to kristijan.pajtasev@hotmail.com with subject push-router.

Instalation

CLI

npm install push-router

package.json

"push-router": "x.y.z"

Example

There is example in example folder. It uses node and ExpressJS. To start it set position in terminal inside example folder. To install dependencies run:

npm install

To start it run:

node server/server.js

Usage

Getting module

var Router = require("push-router");

Adding route

Router.addRoute(route, callback)

Adding default route

Router.addDefaultRoute(callback)

Start listening for route changes

Router.init()

Before route changed action

To execute some action in between routes (etc sending for analytics) you can use addBeforeRouteChanged method. In it as a parameters you will receive previous route and next route.

Router.addBeforeRouteChanged(function(){})

Changing route

Changing route works by clicking on a element with attribute data-route="route". Router will catch click and execute for route defined in href.

<a data-route="route" href="test">test</a>

Query

Each route can have query and it will be passed as a object and last object in route callback. For route test?param=2 arguments in callback will be ["test?param=2", {param: "2"}]

Route rules

Simple route

Router.addRoute("test",function() {}); matches maysite.com/test

Regex route

Router.addRoute("test/{{\\d+}}",function() {}); matches maysite.com/test/1

Parameter route

Router.addRoute("test/{id}",function() {}); matches maysite.com/test/1, passes
1 as argument in callback ["test/1", "1"]

If you want to make that parameter optional just add ? after it

Router.addRoute("test/{id}?",function() {}); matches maysite.com/test/1 and maysite.com/test/