Pilot v2
Multifunctional JavaScript router solves the problem of routing your application, providing full control over the route.
Get started
const router = Pilot.create({
'#route-id': {
url: '/:type(/:detail)?', // route pattern
model: {
user: (req) => fetch(`/api/${req.params.type}`).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';
API
-
create(stitemap:
Object
):Pilot
-
URL([url:
string
[, base:string
]]) — see Native URL and-
parse(url:
string
) -
toMatcher(pattern:
string|RegExp
) -
#properties
-
protocol:
string
-
protocolSeparator:
string
-
credhost:
string
-
cred:
string
-
username:
string
-
password:
string
-
host:
string
-
hostname:
string
-
port:
string
-
origin:
string
-
path:
string
or pathname -
segment1:
string
-
segment2:
string
-
search:
string
-
query:
object
-
params:
object
-
hash:
string
-
protocol:
-
#methods
-
addToQuery(add:
object|string|null
) -
removeFromQuery(remove:
string[]
) -
setQuery(add:
object|string|null
[, remove:string[]
)
-
addToQuery(add:
-
parse(url:
-
queryString
-
parse(value:
string
):object
-
stringify(query:
object
):string
-
parse(value:
Pilot
lifecycle
beforeroute
-
req:
Pilot.Request
route
-
req:
Pilot.Request
-
route:
Pilot.Route
routefail
-
req:
Pilot.Request
-
route:
Pilot.Route
-
error:
Error
routeend
-
req:
Pilot.Request
-
route:
Pilot.Route
Pilot
methods and properties
Object
model:List of all models
Pilot.Request
request:Current Request.
URL
activeUrl:Active/Current URL.
Pilot.Route
route:Current route.
string
getUrl(id[, params[, query]]):-
id:
string
— route id -
params:
object
— route parametrs (optional) -
query:
object|inherit
— route GET-query parametrs (optional)
Promise
go(id[, params[, query[, details]]]):-
id:
string
— route id -
params:
object
— route parameters (optional) -
query:
object|inherit
— route GET-query parameters (optional) -
details:
object
- route navigation details (options)
Promise
nav(url[, details]):-
url:
string
-
details:
object
- route navigation details (options)
Promise
reload():Emits beforereload
and reload
events. if a handler to beforereload
returns false
, does not
perform actual reload and returns a resolved promise instead.
Pilot.Route
methods and properties
Object
model:Local models (inherit global models).
init()
Protected method.
string
getUrl([params, [query]]):-
params:
Object
(optional) -
query:
object|inherit
— route GET-query parametrs (optional)
boolean
is(id):id:string — route id or space-separated list
Pilot.Loader
const modelLoader = new Pilot.Loader({
user: ({params:{id}}) => fetch(`/api/user/${id}`).then(r => r.json()),
status: () => fetch(`/api/status`).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);
});