Vue-Router
1. Знай маршрут
1. Что такое маршрутизация (понимание)
- Объяснение маршрутизации
- Маршрутизация - это активность передачи информации из исходного адреса в адрес назначения через взаимосвязанную сеть
- В маршрутизации есть очень важная концепция, называемая таблицей маршрутизации.
- Таблица маршрутизации по сути является таблицей отображения, которая определяет направление пакета данных.
- маршрутизатор
- Маршрутизаторы обеспечивают два механизма: маршрутизацию и переадресацию.
- Маршрутизация определяет, откуда отправляется пакет.источникприбытьназначениямаршрут
- передача будетВходпередать данные в соответствующийвыход
- Маршрутизаторы обеспечивают два механизма: маршрутизацию и переадресацию.
Маршрутизация предназначена для отображения различного контента или страниц в соответствии с разными ur-адресами;
Маршрутизация — относительно широкое и абстрактное понятие, суть маршрутизации — соответствие
2. Этап внутренней маршрутизации
- В первые дни разработки веб-сайтов вся HTML-страница отображалась сервером.
- Сервер будет напрямую отображать соответствующую HTML-страницу и отображать ответ клиенту.
- Внутренняя маршрутизация
- Когда браузер переключается между разными URL-адресами в адресной строке, он каждый раз отправляет запрос на фоновый сервер, и сервер отвечает на запрос.
- Сращивание html-файлов в фоновом режиме и передача их на внешний дисплей с возвратом на разные страницы
- Это означает, что браузер обновит страницу, если скорость сети низкая, экран может быть полностью белым, и тогда будет новый контент. Еще одна серьезная проблема внутренней маршрутизации заключается в том, что внешняя и внутренняя части не разделены.
- Недостатки внутренней маршрутизации
- Модули всей страницы написаны и поддерживаются бэкэнд-персоналом, что непросто поддерживать.
- Обычно код HTML и соответствующий код внутренней логики смешиваются вместе, что очень плохо писать и поддерживать.
3. Внешний этап маршрутизации
- Стадия разделения front-end и back-end:
- С появлением Ajax появился режим разработки, который разделяет переднюю и заднюю части.
- Серверная часть предоставляет только API для возврата данных, передняя часть получает данные через Ajax и отображает данные на странице через JS.
- Самым большим преимуществом этого является то, что обязанности фронтенда и бэкэнда ясны, бэкэнд фокусируется на данных, а фронтенд фокусируется на взаимодействии и визуализации.
- А после появления мобильного терминала (ISO/Android) бэкенду не нужно делать никакой обработки, и можно использовать прежний набор API.
- Что такое СПА
- SPA — это аббревиатура одностраничного веб-приложения, переводимая как одностраничное веб-приложение.
- Проще говоря, SPA — это веб-проект только с одной html-страницей.После загрузки страницы SPA не будет перезагружать или переходить страницу из-за действий пользователя.
- Вместо этого используйте JS для динамического преобразования содержимого html, чтобы имитировать переход между несколькими представлениями.
- Одностраничное расширенное приложение (SPA)
- По сути, главная особенность SPA заключается в том, чтобы добавить уровень фронтальной маршрутизации на основе разделения фронтенда и бэкенда.
- То есть внешний интерфейс для поддержки набора правил маршрутизации.
- В чем суть внешней маршрутизации?
- Измените URL, но страница не обновляется в целом
2. Правила внешней маршрутизации
1. Хэш URL
- Хэш URL-адреса — это якорь (#), который существенно изменяет атрибут href в window.location.
- Мы можем прямое задание
location.hash
Измените href, но страница не обновляется
2. Режим истории HTML5
- Интерфейс истории является новым в HTML5, он имеет пять режимов для изменения URL-адреса без обновления страницы.
-
history.pushState()
- Похоже на: толкни и вытолкни, первый пришел последним
-
history.replaceState()
- Заменить URL, без резерва
-
history.back()
- Вернуться к предыдущему URL
-
history.forward()
- Перейти к последнему URL
-
history.go(Number)
-
Number
: перейти вперед или назад к указанному URL
-
3. Основы Vue-маршрутизатора
1. Познакомьтесь с vue-router
- vue-router — официальный плагин маршрутизации для Vue.js, который глубоко унаследован от vue.js и используется для создания одностраничных приложений (официальная документация)
- vue-router основан на маршрутизации и компонентах
- Маршрутизация используется для установки путей доступа и сопоставления путей и компонентов.
- В одностраничном приложении vue-router смена пути страницы — это переключатель компонента
2. Установите и используйте vue-router
-
Шаг 1: установка npm
npm install vue-router --save
-
Шаг 2: Используйте его в проекте модуля (поскольку это плагин, поэтому передайте
Vue.use()
установить функцию маршрутизации)-
①импортобъект маршрута и вызов
Vue.use(VueRouter)
Установить маршрутизацию -
② Создатьэкземпляр маршрутизации,и пройти по маршрутуКонфигурация сопоставления
-
③ В файле основной записи: импортируйте созданный экземпляр маршрутизации, экземпляр VueМонтирование экземпляра маршрутизации
-
1. Настройте Vue-Router (на фото)
-
-
Шаг 3: Используйте
vue-router
-
Создание компонентов маршрутизации
-
Настроить сопоставление маршрутов (отношения между компонентами и сопоставлением путей)
-
использовать маршрутизацию
<router-link to="/path">
а также<router-view>
-
2. Используйте Vue-Router (на фото)
-
3. Подробное объяснение компонентов маршрутизации
-
<router-link>
: метка — это компонент со встроенным глобальным параметром, он будет отображаться как<a>
Этикетка-
to="path"
: это свойство будет отображаться какhref
Атрибуты -
to="path"
: значение свойства будет отображаться как #hash
адрес-
path
: Путь пути, настроенный в маршруте
-
-
-
<router-view>
: Метка будет динамически отображать соответствующий компонент в соответствии с текущим путем. -
Когда маршрут переключается, переключатель
<router-view>
Установленные компоненты, остальное содержимое не изменится
4. Другие дополнения для настройки маршрутизации
1. Путь маршрута по умолчанию
Сценарий: зайдите на главную страницу веб-сайта, надеюсь
<router-view>
Визуализировать содержимое главной страницы
- добавить в правила маршрутизацииПеренаправить на путь по умолчанию
const routes = [
{
// 配置默认路径
path: '/',
// 重定向到/home路径
redirect: '/home'
}
]
2. Режим истории пути
Сценарий: URL-адрес, отображаемый страницей, а не диапазон хеш-значений
#/home
, хотите отобразить обычный URL: /home
- существует
VueRouter
примерoption
установить вmode
дляhistory
Режим
// 创建VueRouter对象
const router = new VueRouter({
routes,// 路由规则
mode: 'history'// URL显示的模式
})
3. Добавлены атрибуты router-link и конфигурации маршрутизации
-
<route-link>
другие свойства-
tag=""
: вкладка может указать<router-link>
какой элемент отображает компонент -
replace
: Нет записи истории отката, перемотка вперед не действует -
active-class=""
: когда<router-link>
Когда соответствующий путь будет успешно сопоставлен, он автоматически добавитrouter-link-active
изclass
, настраиватьactive-class
Имя по умолчанию можно изменить
-
<!-- tag: 指定<router-link>组件渲染成什么元素 -->
<!-- replace: 没有history记录,前后键没有用 -->
<!-- active-class: 修改匹配成功默认添加的class类名 -->
<router-link to="/home" tag="button" replace active-class="active">首页</router-link>
<router-link to="/about" tag="button" replace active-class="active">关于页面</router-link>
- Настройте свойства маршрута:
linkActiveClass
- Функция: когда
<router-link>
Когда соответствующий путь успешно совпадает, установите имя класса, добавленное по умолчанию.
- Функция: когда
const router = new VueRouter({
routes,// 路由的映射规则
mode: 'history',// 模式
linkActiveClass: 'active'// 设置默认匹配添加地类
})
4. Программная навигация
- Сценарий: не используется
<router-link>
Глобальный компонент для перехода к URL-адресу-
this.$router.push('path')
: Для реализации URL-адреса перехода существует резервная запись истории. -
this.$router.replace('path')
: для достижения URL-адреса перехода нет записи истории отката.
-
methods: {
home() {
// 没有使用<router-link>全局组件,来跳转URL,如何实现
// this.$router.push('/home') // 有回退记录
this.$router.replace('/home') // 没有回退记录
},
about() {
// this.$router.push('/about')
this.$router.replace('/about')
}
}
5. Динамическое сопоставление маршрутов
-
В некоторых случаях нам нужно динамически установить путь, например, вход на страницу пользователя, и мы хотим отобразить следующий путь
- /пользователь/ааа или /пользователь/ббб
- В дополнение к предыдущему /user также следует идентификатор пользователя.
- Эта взаимосвязь соответствия между путем и компонентом называется динамической маршрутизацией (также способом маршрутизации данных).
-
Шаги динамического сопоставления маршрутов
-
1. Настройте параметры динамической маршрутизации
const routes = [{
path: '/user/:userId',
component: User
}] -
2. Передайте параметры в компонент APP.vue
-
3. Передайте компонент маршрутизации
$route.params
Получить параметры маршрута
-
-
значок
5. Маршрутизация ленивой загрузки
1. Понимание ленивой загрузки маршрутизации
- официальное объяснение
- При упаковке и сборке приложения пакет JavaScript становится очень большим, что влияет на загрузку страницы.
- Если мы сможем разделите компоненты, соответствующие различным маршрутам в разные блоки кода, а затем загружать соответствующие компоненты при доступе к маршруту, он будет более эффективным
- Зачем использовать ленивую загрузку маршрутизации?
- Наши упакованные файлы обычно помещаются в файл js, который должен быть очень большим.
- Если мы запросим этот файл из сети за один раз, это может занять много времени, и даже в браузере появится короткий белый экран.
- Как этого избежать:Ленивая загрузка с маршрутамипросто хорошо
- Что делает ленивая загрузка маршрута?
- Основная функция ленивой загрузки маршрута — упаковать компоненты, соответствующие маршруту, в блоки кода js один за другим.
- Только при доступе к этому маршруту загружается соответствующий компонент
2. Используйте ленивую загрузку маршрутизации
-
Метод 1: объединить асинхронные компоненты Vue и анализ кода Webpack
- const Home = resolve => { require.ensure(['../components/Home.vue'], () => { resolve(require('../components/Home.vue')) })};
-
Способ 2: запись AMD
- const About = resolve => require(['../components/About.vue'], resolve);
-
способ третий: В ES6 у нас есть более простой способ организовать разделение кода асинхронных компонентов Vue и Webpack.
const Home = () => import('../components/Home.vue')
-
Рендеринг после упаковки
6. Вложение маршрута
1. Распознайте вложенную маршрутизацию
- На домашней странице мы получаем доступ к некоторому контенту через /home/news и /home/message.
- Сопоставление другого компонента по одному пути, доступ к этим двум путям также приведет к раздельному отображению двух компонентов.
- Отношения между путями и компонентами следующие:
2. Реализация вложенной маршрутизации
- 1. Создайте компоненты
- 2. В правиле сопоставления маршрутов настройте вложенные маршруты:
children: [{},{}]
- 3. На странице, куда нужно вложить компонент, используйте router-link и router-view
3. Путь по умолчанию для вложенных маршрутов
- Вложенные маршруты также могут устанавливать пути по умолчанию.
const routes = [
{
path: '/home',
component: Home,
// 配置嵌套路由
children: [
{
// 嵌套路由的默认路径
path: '',
redirect: 'news'
},
{
path: 'news',
component: News
},
{
path: 'message',
component: Message
}]
}]
7. запрос для получения параметров
1. получение запроса
- 1. Создайте новый компонент Profile.vue
- 2. Настройте сопоставление маршрутов
- 3. Добавьте переход
в APP.vue
<!-- 1. APP.vue 参数的传递 -->
<router-link :to="{path: '/profile',query: {
name: 'wuyifan',
age: 18,
height: 1.88
}}">档案</router-link>
<!-- 2. Profile.vue 获取query参数 -->
<h3>{{$route.query}}</h3>
значок
2. Как передать параметры
- Есть два основных типа передаваемых параметров: params и query
-
params
- Настроить маршрутизацию
path
:/user/:userId
- Способ передачи: передаваемое значение вставляется после пути
- Получить переданные параметры:
$route.params.userId
- Настроить маршрутизацию
-
query
- Настроить маршрутизацию
path
:/profile
(Нормальная конфигурация) - Способ доставки:
{path: '/profile', query: {name: 'yifan'} }
- Получить переданные параметры:
$route.query.name
- Настроить маршрутизацию
- когда вы не используете
<router-link>
прыгать кthis.$router.push({
path: '/profile',
query: {
name: 'yifan',
age: 18,
height: 1.88
}
})
3. Разница между маршрутизатором и маршрутом
-
$router
а также$route
разница-
$router
Это экземпляр VueRouter, который используется для операций навигации, связанных с путем. -
route
является компонентным объектом текущего сопоставления пути (текущий активный объект маршрутизации), который можно получитьpath, query
Параметры и т.д.
-
VIII. Навигация охраны ⚔
1. Знайте навигационную стражу
Официальное объяснение:
vue-router
Предоставленные навигационные охранники в основном используются для навигации по охранникам путем прыжка или отмены.
- навигационная охрана
- Навигационные охранники - некоторые из маршрутов в процессе прыжков.функция ловушки, роутинг джамп это большой процесс, этот большой процесс это маленький процесс до и после, в каждом процессе есть функция, эта функция позволяет управлять некоторыми другими вещами, это защита навигации
-
vue-router
при условииbeforeEach
а такжеafterEach
ловушки, они будут запускаться до и после изменения маршрута
глобальная функция ловушки
- Вы можете напрямую написать логику кода в файле конфигурации маршрутизации router.js, и вы можете сделать некоторый глобальный перехват маршрутизации
// 全局前置守卫
router.beforeEach((to, from, next) => {
// to: Route:即将要进入的目标路由对象
// from: Route:当前导航正要离开的路由
// 进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是confirmed (确认的)
next();
});
// 全局后置守卫
router.afterEach((to, from) => {
console.log(to.path);
});
2. Использование навигационной защиты
- Рассмотрим требование: в приложении SPA, как изменить заголовок страницы
- Первое, о чем вы должны подумать, это то, что в файле .vue компонента, соответствующем каждому маршруту, через
mounted
Функция жизненного цикла, изменить заголовок - Но когда страниц много, этот метод непросто поддерживать (поскольку аналогичный код нужно выполнять на нескольких страницах).
- Есть ли лучший способ?Просто используйте навигационную защиту
- Первое, о чем вы должны подумать, это то, что в файле .vue компонента, соответствующем каждому маршруту, через
- Используйте средства навигации в файлах конфигурации маршрутизации для изменения заголовков страниц.
// 在钩子当中定义一些标题, 可以利用meta来定义
const routes = [
{
path: '/user/:userId',
component: User,
meta: {
title: '用户'
}
},
{
path: '/profile',
component: Profile,
meta: {
title: '档案'
}
}
]
// ------导航守卫(guard)-----------
router.beforeEach((to, from, next) => {
// 从from跳转到to
// from: 将要进行跳转的当前$route对象 (跳转前的一些操作)
// to: 跳转后$route对象 (跳转后的一些操作)
// next(): 调用该方法后, 才能进入下一个钩子
document.title = to.matched[0].meta.title;
next()
})
3. Глобальный почтовый хук
- Вы также можете зарегистрировать глобальные почтовые хуки, однако, в отличие от охранников, эти хуки не будут принимать
next
Функция также не меняет саму навигацию.
router.afterEach((to, from) => {
// ...
})
4. Эксклюзивная функция перехвата маршрутизации
- Вы можете сделать перехват прыжка на одном маршруте. Просто напишите код в файле дозирования
const router = new VueRouter({
routes: [
{
path: '/foo',
component: Foo,
beforeEnter: (to, from, next) => {
// ...
}
}
]
})
5. Функция хука в компоненте
- Более детальный перехват маршрута, только для перехвата, входящего в определенный компонент
const Foo = {
template: `...`,
beforeRouteEnter (to, from, next) {
// 在渲染该组件的对应路由被 confirm 前调用
// 不!能!获取组件实例 `this`
// 因为当钩子执行前,组件实例还没被创建
},
beforeRouteUpdate (to, from, next) {
// 在当前路由改变,但是该组件被复用时调用
// 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
// 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
// 可以访问组件实例 `this`
},
beforeRouteLeave (to, from, next) {
// 导航离开该组件的对应路由时调用
// 可以访问组件实例 `this`
}
}
Сценарии использования функции хука
На самом деле, функция хука маршрутизации не очень часто используется в разработке проекта, она обычно используется для проверки статуса входа в систему и перехода на страницу входа без входа в систему, проверки разрешений и так далее. Конечно, с развитием проекта будет больше функций, которые лучше реализовать с помощью функций-хуков.Мы знаем, что функции-хуки — это хорошо.В следующий раз, когда вы столкнетесь с проблемой, ваш разум всплывет.О, это функция используется для реализации хука было бы неплохо. Наша цель достигнута.
9. Сохранять компоненты
1. Кэширование страницы
- В одностраничном приложении (SPA), созданном Vue, обычно используется модуль маршрутизации.
vue-router
-
vue-router
Состояние переключаемого компонента не сохраняется, при его push или replcae старый компонент будет уничтожен, новый компонент будет создан и повторится полный жизненный цикл - Но иногда у нас есть некоторые требования, такие как возврат на страницу списка, на которую щелкнул пользователь перед переходом, но при возврате нет предыдущей записи.Для такого требования к кэшированию страницы мы можем использовать
keep-alive
компоненты для решения
2.поддерживающий компонент
-
keep-alive
это встроенный компонент Vue, который может сделатьВключенные компоненты сохраняют состояние, илиизбегать повторного рендеринга- два очень важныхАтрибуты:
-
inclue
: значение представляет собой строку или регулярное выражение, кэшируются только соответствующие компоненты. -
exclue
: значение представляет собой строку или регулярное выражение, любые совпадающие компоненты не будут кэшироваться. - Будьте осторожны: строка соответствует свойству имени в компоненте Vue, если оно не настроено
name
Свойство Keep-alive не вступит в силу
- использовать
keep-alive
: существуетkeep-alive
Компоненты просмотра в пакете кэшируются
<!-- Profile,User是 Vue 组件中的name属性(千万注意,如果没有配置将不会生效) -->
<keep-alive exclude="Profile,User">
<router-view></router-view>
</keep-alive>
- Кроме того: две функции жизненного цикла, активированные и деактивированные, должны быть доступны после использования компонента поддержания активности, в противном случае он не существует.