-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrouter.js
More file actions
38 lines (32 loc) · 1.29 KB
/
router.js
File metadata and controls
38 lines (32 loc) · 1.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
const routes = {
"/": () => import("./pages/main_page/main_page.jsx"),
"/profile": () => import("./pages/profile_page/profile.jsx"),
};
// Инициализация роутера
const initRouter = async () => {
const root = document.getElementById("root");
const path = window.location.pathname;
// Загружаем соответствующий модуль
const renderPage = routes[path];
if (renderPage) {
const module = await renderPage();
if (module.default) {
root.innerHTML = ""; // Очищаем содержимое
module.default(); // Вызываем экспортированный рендеринг
}
} else {
root.innerHTML = "<h1>404 - Page Not Found</h1>";
}
};
// Перехватываем изменения в адресной строке
window.onpopstate = () => initRouter();
// Обработка кликов по ссылкам
document.addEventListener("click", (e) => {
if (e.target.tagName === "A" && e.target.dataset.link !== undefined) {
e.preventDefault();
window.history.pushState(null, "", e.target.href);
initRouter();
}
});
// Запуск роутера при загрузке
initRouter();