# Маршрутизиране на страници в браузъра без презареждане

> Регистрирайте маршрути от страна на клиента с ROUTE(), навигирайте с REDIRECT(), четете параметрите на URL и query string от NAV и се връщайте назад в историята.

Framework: jcomponent20
Product: jComponent 20 (jcomponent@20)
Language: bg
Content-SHA256: 4ff41430a283288e98d2434b8711067665618f796accc6347ea725344e4c7940
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: jcomponent20@3fedd009a277f50fddc608b97afbec553b67c51b
Review: not-recorded

jComponent има собствен рутер за приложения от една страница. `ROUTE(url, fn)` регистрира маршрут: сегментите `{name}` се подават на `fn` като аргументи, по ред. `REDIRECT(url)` променя адреса с History API (без зареждане на страница) и изпълнява съвпадащия маршрут. Маршрутите се сравняват сегмент по сегмент: маршрут и URL трябва да имат еднакъв брой сегменти, а `*` съвпада с всяка стойност на своята позиция. `NAV` описва текущото местоположение: `NAV.url` е пътят, `NAV.query` разчетеният query string, а `NAV.params` аргументите на маршрута. `NAV.back()` и `NAV.forward()` се движат из историята, която jComponent поддържа.

За сървъра това си остава една страница, така че всеки URL под вашето приложение трябва да връща същия HTML (`ROUTE('GET /*')`, който изобразява скелета), иначе презареждане на `/users/5/` би дало 404.

```html public/index.html
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8" />
	<title>jComponent</title>
	<link rel="stylesheet" href="//cdn.componentator.com/spa.min@20.css" />
	<script src="//cdn.componentator.com/spa.min@20.js"></script>
</head>
<body>

	<h1 id="title"></h1>

	<script>

		ROUTE('/', function() {
			$('#title').text('Home');
		});

		ROUTE('/users/{id}/', function(id) {
			$('#title').text('User ' + id);
		});

		ROUTE('/files/*', function() {
			$('#title').text('Files');
		});

	</script>

</body>
</html>
```
