Html academy vue js

Как работать с Vue 3 Router

☝ Предполагается, что к моменту прочтения этой статьи вы уже знаете, как создавать простое Vue-приложение. Также предполагается, что приложение открывается по адресу localhost:8080 .

Для чего нужен маршрутизатор

При написании сайта или веб-приложения мы можем использовать обычные гиперссылки. Например, сделать панель навигации так:

Этот способ работает, но не всегда подходит, потому что каждый клик по ссылке приводит к загрузке новой страницы. Это нормальное поведение для статических сайтов — блога или ленты новостей. Но если мы хотим сделать интерфейс интерактивным, необходимо другое решение — например, использовать маршрутизатор.

Концепция Vue Router

Концепция маршрутизатора сводится к тому, что в зависимости от указанного пути и дополнительных параметров приложение отображает соответствующий контент. Например, наша логика подразумевает, что при переходе в /settings отобразится компонент с настройками, а в /contacts — форма обратной связи.

Давайте создадим простое Vue-приложение, которое реализует такую логику. Для быстрого старта воспользуйтесь шаблоном в CodeSandbox.

Мы намеренно опустим шаги по инициализации проекта, поскольку подразумевается, что с этим вы знакомы.

Для начала установим Vue Router:

npm install --save vue-router 

Добавим в точку входа в приложение main.js следующий код:

import < createApp >from 'vue' import < createRouter, createWebHistory >from 'vue-router' import App from './App.vue' import HomeView from './views/HomeView.vue' const router = createRouter(< routes: [< path: '/', component: HomeView >], history: createWebHistory() >) const app = createApp(App) app.use(router) app.mount('#app') 

Маршруты — это массив объектов, в котором мы описываем правила для отображения компонентов в зависимости от маршрута.

history — это настройка, которая отвечает за механизм поведения Vue Router. Мы указали createWebHistory() , то есть роутер будет использовать History API.

Чтобы посмотреть на работу Vue Router, добавим компонент , который отвечает за отображение. Он является своего рода контейнером, в котором отрисовывается компонент соответствующего маршрута.

Если мы откроем приложение в браузере, то увидим страницу, которую описали в HomeView.vue .

🚀 Изучите Vue.js 3

Научитесь с нуля создавать и стилизовать проект, добавлять анимации в веб-приложение и проводить тестирование.

Иерархия и вложенность маршрутов

Создадим страницу настроек views/SettingsView.vue :

Добавим новый объект в массив routes в файле main.js :

import SettingsView from './views/SettingsView.vue' const router = createRouter(< routes: [< path: '/', component: HomeView >, < path: '/settings', component: SettingsView >], history: createWebHistory() >) 

Откроем в браузере страницу []() и увидим только что созданный нами компонент.

Теперь добавим дочерний маршрут для страницы настроек — например, настройки профиля:

Укажем это в массиве routes в файле main.js :

import SettingsProfileView from './views/SettingsProfileView.vue' const router = createRouter(< routes: [< path: '/', component: HomeView >, < path: '/settings', component: SettingsView, children: [< path: 'profile', component: SettingsProfileView >] >], history: createWebHistory() >) 

Однако, открыв страницу по маршруту /settings/profile , мы не увидим изменений. Для отображения дочерних маршрутов их родитель (в нашем случае SettingsView.vue ) должен также содержать . Исправим это:

Теперь всё работает так, как мы и предполагали.

Для привычной навигации по ссылкам необходимо использовать компонент . Он принимает проп :to , который указывает, куда будет вести ссылка. Можно прописать полный путь или параметры маршрута — например, имя и query -парметры, которые мы рассмотрим далее.

Давайте зададим маршрутам имена и посмотрим, как это работает.

const router = createRouter(< routes: [< path: '/', name: 'home', component: HomeView >, < path: '/settings', name: 'settings', component: SettingsView, children: [< path: 'profile', name: 'settings-profile', component: SettingsProfileView >] >], history: createWebHistory() >) 

В компоненте views/SettingsView.vue добавим ссылку на главную страницу:

А если мы хотим реализовать навигацию на JavaScript — например, когда пользователь совершает какое-то действие, то можем воспользоваться методом push или replace . Они отличаются тем, что push сохраняется в истории навигации браузера, а replace перезаписывает текущее состояние.

Для примера добавим кнопку, открывающую настройки профиля, в компонент views/SettingsView.vue :

   

Теперь, находясь на странице /settings и нажав на кнопку, мы попадаем на /settings/profile и видим надпись «Настройки профиля».

Также добавим панель навигации на главную страницу. Пока что там будет только ссылка на настройки.

Маршрутизатор и Composition API

Vue Router предоставляет два основных Composition API для работы с маршрутами: useRouter и useRoute .

useRouter — используется для получения доступа к самому маршрутизатору. В примере выше мы вызывали useRouter() , чтобы получить объект маршрутизатора.

useRoute — используется для получения текущего маршрута. Рассмотрим его подробнее.

Ранее мы добавили кнопку «Показать настройки профиля», но она не пропадает, даже когда мы открываем эти настройки. Давайте исправим эту ошибку.

   

Теперь блок с кнопкой будет отображаться, только если открыта страница по маршруту, потому что мы дали ей имя — settings — и проверили его в компоненте.

Параметры маршрута

При помощи useRoute можно получить доступ к параметрам маршрута.

Создадим новый компонент views/UserView.vue :

   

Компонент предполагает, что текущий маршрут содержит параметр id . Давайте добавим этот идентификатор:

import UserView from './views/UserView.vue' const router = createRouter(< routes: [< path: '/', name: 'home', component: HomeView >, < path: '/settings', name: 'settings', component: SettingsView, children: [< path: 'profile', name: 'settings-profile', component: SettingsProfileView >] >, < path: '/user/:id', name: 'user', component: UserView >], history: createWebHistory() >) 

Запись path вида /user/:id означает, что если мы зайдём на страницу /user/123 , то маршрутизатор рассмотрит 123 как параметр id . Соответственно, если мы откроем /user/123 в браузере, то увидим текст «Пользователь ID: 123».

Добавим также ссылку на пользователя 123 на главной странице.

Страница ошибки «Страница не найдена»

Чтобы создать страницу для 404 ошибки, в конец массива маршрутов положим объект вида:

import NotFoundView from './views/NotFoundView.vue' const router = createRouter(< routes: [< path: '/', name: 'home', component: HomeView >, < path: '/settings' name: 'settings', component: SettingsView, children: [< path: 'profile', name: 'settings-profile', component: SettingsProfileView >] >, < path: '/user/:id', name: 'user', component: UserView >, < path: '/:pathMatch(.*)*', name: '404', component: NotFoundView >], history: createWebHistory() >) 

Теперь, если мы зайдём на страницу по пути /whatever или любому несуществующему пути, то увидим надпись «Страница не найдена».

Защищённые маршруты и метаданные

Предположим, нам нужно запретить переход неавторизованных пользователей по маршруту /settings . Обозначим дополнительное поле в объекте — метаданные:

const router = createRouter(< routes: [< path: '/', name: 'home', component: HomeView >, < path: '/settings' name: 'settings', component: SettingsView, children: [< path: 'profile', name: 'settings-profile', component: SettingsProfileView, meta: < requiresAuth: true >>] >, < path: '/user/:id', name: 'user', component: UserView >, < path: '/:pathMatch(.*)*', name: '404', component: NotFoundView >], history: createWebHistory() >) 

Теперь мы сможем обращаться к этому полю, когда оперируем объектом текущего маршрута — например, как в примерах выше, с помощью useRoute() .

Однако чтобы не делать проверку прямо в компонентах, воспользуемся встроенным механизмом Vue Router:

const router = createRouter(< . >) // Для упрощения укажем это в переменной const isAuthenticated = false router.beforeEach((to, from) => < if (to.meta.requiresAuth && !isAuthenticated) < return < name: 'home' >> >) 

В этом примере если неавторизованный пользователь попытается зайти на /settings/profile , выполнится редирект на главную.

Анимация переходов между страницами

☝ Предполагается, что к этому моменту вы уже знакомы с концепцией работы компонента во Vue.

Давайте добавим анимацию смены маршрутов в наше приложение. Откроем файл App.vue и изменим его .

В данном примере мы получаем компонент, который рендерится внутри (в нашем случае — корневого). Затем передаём этот компонент внутрь , который будет вызывать анимацию при смене компонента.

Если вы откроете приложение в браузере и попробуете перейти по страницам, ничего не произойдёт, ведь пока что у не добавлена анимация. Давайте это исправим. Добавим к атрибут name и укажем стили.

  .fade-enter-active, .fade-leave-active < transition: opacity 0.5s ease; >.fade-enter-from, .fade-leave-to 

Заключение

В этой статье мы рассмотрели основные концепции работы Vue Router. Этого достаточно, чтобы написать простое приложение. Но чтобы глубже разобраться в теме, рекомендуем изучить документацию и больше практиковаться.

Больше материалов

«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.

Источник

Html academy vue js

Нажимая кнопку «Зарегистрироваться», вы даёте своё согласие на обработку персональных данных в соответствии с «Политикой конфиденциальности» и соглашаетесь с «Условиями оказания услуг».

Восстановление доступа

Забыли пароль или потеряли доступ к профилю? Введите привязанную к профилю эл. почту, мы отправим вам письмо со ссылкой для восстановления.

Забыли привязать эл. почту к профилю? Напишите нам, мы поможем.

Выбрать способ оплаты

Оплата в рассрочку

Сумма рассрочки
В размере стоимости курса.

В каком банке я могу получить рассрочку
Мы сотрудничаем с банковскими программами Тинькофф-банк, Рассрочка/Кредит от СберБанка, Почта Банк и ОТП Банк.

Рассрочка/Кредит от СберБанка
— Без первоначального взноса по кредиту;
— Без переплаты;
— Срок кредита — месяцев;
— Необходимо иметь российский паспорт и быть в возрасте от 21 до 70 лет.
— Подробнее об условиях

Тинькофф-банк
— Без первоначального взноса по кредиту;
— Без переплаты;
— Срок кредита — месяцев;
— Необходимо иметь российский паспорт и быть в возрасте от 18 до 70 лет.

Почта Банк
— Без первоначального взноса по кредиту;
— Без переплаты;
— Срок кредита — месяцев;
— Необходимо иметь российский паспорт и быть в возрасте от 18 до 70 лет.

ОТП Банк
— Без первоначального взноса по кредиту;
— Без переплаты;
— Срок кредита — месяцев;
— Необходимо иметь российский паспорт и быть в возрасте от 18 до 70 лет.

Как оформить рассрочку
Выберите оплату в рассрочку, подходящий вам банк и нажмите кнопку «Оформить». Заполните заявку на сайте выбранного вами банка и дождитесь её одобрения. Одобрение обычно происходит в день обращения.

Сколько и когда возвращать по кредиту
Итоговую сумму и график платежей вы увидите перед тем, как получить рассрочку. Рассрочку выплачивают ежемесячно по графику.

Оплата частями

Условия:
— Первоначальный взнос — 25%.
— Срок оплаты – 6 недель.
— Сумма от 1 000 до 30 000 р.

Требования к клиенту:
— Наличие дебетовой или кредитной карты.
— Возраст от 18 до 70 лет.
— Гражданство РФ.

Подробнее о сервисе и условиях на сайте platichastyami.ru

Источник

Html academy vue js

Нажимая кнопку «Зарегистрироваться», вы даёте своё согласие на обработку персональных данных в соответствии с «Политикой конфиденциальности» и соглашаетесь с «Условиями оказания услуг».

Восстановление доступа

Забыли пароль или потеряли доступ к профилю? Введите привязанную к профилю эл. почту, мы отправим вам письмо со ссылкой для восстановления.

Забыли привязать эл. почту к профилю? Напишите нам, мы поможем.

Выбрать способ оплаты

Оплата в рассрочку

Сумма рассрочки
В размере стоимости курса.

В каком банке я могу получить рассрочку
Мы сотрудничаем с банковскими программами Тинькофф-банк, Рассрочка/Кредит от СберБанка, Почта Банк и ОТП Банк.

Рассрочка/Кредит от СберБанка
— Без первоначального взноса по кредиту;
— Без переплаты;
— Срок кредита — месяцев;
— Необходимо иметь российский паспорт и быть в возрасте от 21 до 70 лет.
— Подробнее об условиях

Тинькофф-банк
— Без первоначального взноса по кредиту;
— Без переплаты;
— Срок кредита — месяцев;
— Необходимо иметь российский паспорт и быть в возрасте от 18 до 70 лет.

Почта Банк
— Без первоначального взноса по кредиту;
— Без переплаты;
— Срок кредита — месяцев;
— Необходимо иметь российский паспорт и быть в возрасте от 18 до 70 лет.

ОТП Банк
— Без первоначального взноса по кредиту;
— Без переплаты;
— Срок кредита — месяцев;
— Необходимо иметь российский паспорт и быть в возрасте от 18 до 70 лет.

Как оформить рассрочку
Выберите оплату в рассрочку, подходящий вам банк и нажмите кнопку «Оформить». Заполните заявку на сайте выбранного вами банка и дождитесь её одобрения. Одобрение обычно происходит в день обращения.

Сколько и когда возвращать по кредиту
Итоговую сумму и график платежей вы увидите перед тем, как получить рассрочку. Рассрочку выплачивают ежемесячно по графику.

Оплата частями

Условия:
— Первоначальный взнос — 25%.
— Срок оплаты – 6 недель.
— Сумма от 1 000 до 30 000 р.

Требования к клиенту:
— Наличие дебетовой или кредитной карты.
— Возраст от 18 до 70 лет.
— Гражданство РФ.

Подробнее о сервисе и условиях на сайте platichastyami.ru

Источник

Читайте также:  Css style link background image
Оцените статью