Multifunction JavaScript router.
npm install pilotjsPilot v2
--------
Multifunctional JavaScript router solves the problem of routing your application, providing full control over the route.
``js/api/${req.params.type}
const router = Pilot.create({
'#route-id': {
url: '/:type(/:detail)?', // route pattern
model: {
user: (req) => fetch().then(r => r.json()),
},
onroute(/*Pilot.Request/req) {
console.log(this.model.user);
}
}
});
// Запускаем перехват ссылок и history api
router.listenFrom(document, {autoStart: true});
// Где-то в коде
router.go('#route-id').then(() => ...);
router.getUrl('#route-id', {type: 'user'}); // '/user';
router.route.getUrl({type: 'user'}); // '/user';
router.route.getUrl({type: 'user', detail: 123}); // '/user/123';
`
---
- create(stitemap: Object): Pilotstring
- URL([url: [, base: string]]) — see Native URL andstring
- parse(url: )string|RegExp
- toMatcher(pattern: )#properties
- string
- protocol: string
- protocolSeparator: string
- credhost: string
- cred: string
- username: string
- password: string
- host: string
- hostname: string
- port: string
- origin: string
- path: or pathnamestring
- segment1: string
- segment2: string
- search: object
- query: object
- params: string
- hash: #methods
- object|string|null
- addToQuery(add: )string[]
- removeFromQuery(remove: )object|string|null
- setQuery(add: [, remove: string[])string
- queryString
- parse(value: ): objectobject
- stringify(query: ): string
---
#### beforeroute
- req:Pilot.Request
---
#### route
- req:Pilot.RequestPilot.Route
- route:
---
#### routefail
- req:Pilot.RequestPilot.Route
- route:Error
- error:
---
#### routeend
- req:Pilot.RequestPilot.Route
- route:
---
#### model:Object
List of all models
---
#### request:Pilot.Request
Current Request.
---
#### activeUrl:URL
Active/Current URL.
---
#### route:Pilot.Route
Current route.
---
#### getUrl(id[, params[, query]]):string
- id:string — route idobject
- params: — route parametrs (optional)object|inherit
- query: — route GET-query parametrs (optional)
---
#### go(id[, params[, query[, details]]]):Promise
- id:string — route idobject
- params: — route parameters (optional)object|inherit
- query: — route GET-query parameters (optional)object
- details: - route navigation details (options)
---
#### nav(url[, details]):Promise
- url:stringobject
- details: - route navigation details (options)
#### reload():Promise
Emits beforereload and reload events. if a handler to beforereload returns false, does not
perform actual reload and returns a resolved promise instead.
---
#### model:Object
Local models (inherit global models).
---
#### init()
Protected method.
---
#### getUrl([params, [query]]):string
- params:Object (optional)object|inherit
- query: — route GET-query parametrs (optional)
---
#### is(id):boolean
id:string — route id or space-separated list
---
`js/api/user/${id}
const modelLoader = new Pilot.Loader({
user: ({params:{id}}) => fetch().then(r => r.json()),/api/status
status: () => fetch().then(r => r.json()),fetch
}, {
// неважно сколько раз вызвать ,
// если уже есть запрос на сервер, новый не последует
persist: true,
// Обработку данных загруженной модели
processingModel(modelName, modelData, req, models) {
return {...modelData, pathed: true}; // or Promise
},
// Обработка ошибки при загрузки модели
processingModelError(modelName, error, req, models) {
return Promise.resolve({defaultData: 123}); // или undefined для reject
},
// Финальная обработка полученных данных
processing(req, models) {
return {...models, patched: true};
},
});
// Используем modelLoader
const router = Pilot.create({
model: modelLoader,
});
// Где-то в коде
modelLoader.fetch().then(model => {
console.log(model.user);
console.log(model.status);
});
``