Для интеграции Navigo с Vue необходимо сначала
установить библиотеку через npm или подключить через CDN. В случае
npm:
npm install navigo
После установки в компоненте Vue импортируется Navigo:
import Navigo from 'navigo';
Создается экземпляр роутера с указанием корневого пути и режима:
const router = new Navigo('/', { hash: true });
Маршруты в Navigo задаются методом on. В контексте Vue
это удобно делать в отдельном файле роутера или в главном компоненте
приложения.
router
.on('/', () => {
console.log('Главная страница');
})
.on('/about', () => {
console.log('Страница "О нас"');
})
.on('/profile/:id', (params) => {
console.log('Профиль пользователя с ID:', params.id);
})
.resolve();
Ключевые моменты:
params.:id) и
опциональные (:id?).resolve() инициирует проверку текущего URL и
вызывает соответствующий обработчик.Для отображения компонентов в зависимости от маршрута используется
реактивное состояние Vue. Например, хранение текущего компонента в
data главного приложения:
import Home from './components/Home.vue';
import About from './components/About.vue';
import Profile from './components/Profile.vue';
new Vue({
el: '#app',
data() {
return {
currentView: Home
};
},
created() {
router
.on('/', () => { this.currentView = Home; })
.on('/about', () => { this.currentView = About; })
.on('/profile/:id', (params) => {
this.currentView = Profile;
this.userId = params.id;
})
.resolve();
},
render(h) {
return h(this.currentView, { props: { userId: this.userId } });
}
});
Особенности интеграции:
render(h).Navigo поддерживает хуки перед вызовом обработчика маршрута. Например, проверка авторизации:
router.hooks({
before(done, params, route) {
if (route.url.startsWith('/profile') && !isLoggedIn()) {
router.navigate('/');
return;
}
done();
}
});
params и route содержат информацию о
текущем маршруте.Переход между маршрутами можно осуществлять программно:
this.$navigateTo = (path) => {
router.navigate(path);
};
navigate(path) изменяет URL и вызывает
соответствующий обработчик.router.navigate('/profile/42?tab=settings');
Чтобы компонент Vue реагировал на изменение URL, используется метод
resolve():
window.addEventListener('popstate', () => {
router.resolve();
});
popstate реагирует на действия браузера:
кнопки “назад” и “вперед”.Navigo позволяет задать маршрут по умолчанию, который будет вызываться при несоответствии URL:
router.notFound(() => {
this.currentView = NotFound;
});
<NotFound> для отображения ошибки 404.Для крупных SPA полезна ленивое подгружение компонентов:
router.on('/about', async () => {
const About = await import('./components/About.vue');
this.currentView = About.default;
}).resolve();
import() для оптимизации
загрузки.При необходимости интеграции маршрутов с состоянием приложения можно использовать Vuex:
router.on('/profile/:id', (params) => {
this.$store.commit('setUserId', params.id);
this.currentView = Profile;
});
main.js — инициализация Vue и Navigo, глобальные
хуки.router.js — определение всех маршрутов, middleware,
404.components/ — папка с компонентами, загружаемыми по
маршрутам.store/ — Vuex для состояния приложения и передачи
данных между компонентами.Такая структура обеспечивает чистую и гибкую интеграцию
Navigo с Vue, позволяет поддерживать SPA с динамическим
контентом, защитой маршрутов и ленивой загрузкой компонентов.