Skip to content
Перевод синхронизирован с документацией от , хэш коммита 960662d.

Перенаправление и псевдонимы

Перенаправление

Перенаправление описывается в конфигурации routes. Для перенаправления с /home на /:

js
const routes = [{ path: '/home', redirect: '/' }]

Перенаправление также может быть направлено на именованный маршрут:

js
const routes = [{ path: '/home', redirect: { name: 'homepage' } }]

Или даже использовать функцию для динамического перенаправления:

js
const routes = [
  {
    // /search/screens -> /search?q=screens
    path: '/search/:searchText',
    redirect: to => {
      // функция получает в качестве аргумента новый маршрут
      // здесь мы возвращаем path/location перенаправления.
      return { path: '/search', query: { q: to.params.searchText } }
    },
  },
  {
    path: '/search',
    // ...
  },
]

Обратите внимание, что хуки навигации не применяются к маршруту, который выполняет перенаправление, а только к конечному маршруту. Например, в приведенном выше примере добавление хука навигации beforeEnter на маршруте /home не сработал бы.

При написании redirect вы можете опустить параметр component, так как его на этот маршрут никогда напрямую не перейдут, и, следовательно, нет компонента для отображения. Единственным исключением являются вложенные маршруты: если у записи маршрута есть свойства children и redirect, он также должен содержать свойство component.

Относительное перенаправление Relative redirecting

Также возможно перенаправление по относительному пути:

js
const routes = [
  {
    // будет всегда перенаправлять /users/123/posts на /users/123/profile
    path: '/users/:id/posts',
    redirect: to => {
      // функция получает в качестве аргумента конечный маршрут
      // относительное местоположение не начинается с `/`
      // или { path: 'profile'}
      return 'profile'
    },
  },
]

Псевдонимы

Перенаправление означает, что при посещении пользователем /home, URL будет заменен на /, а затем сопоставлен как /. Но что такое псевдоним (alias)?

Псевдоним / для /home означает, что когда пользователь посещает /home, URL остается /home, но он будет сопоставлен так, как будто пользователь посещает /..

Вышесказанное может быть выражено в конфигурации маршрута следующим образом:

js
const routes = [{ path: '/', component: Homepage, alias: '/home' }]

Псевдоним дает вам свободу для сопоставления структуры пользовательского интерфейса с произвольным URL, вместо того чтобы быть ограниченным структурой вложенных маршрутов в конфигурации. Чтобы сделать путь абсолютным во вложенных маршрутах, начните псевдоним с /. Вы даже можете комбинировать и предоставлять несколько псевдонимов в виде массива:

js
const routes = [
  {
    path: '/users',
    component: UsersLayout,
    children: [
      // это приведет к отображению UserList для этих 3 URL
      // - /users
      // - /users/list
      // - /people
      { path: '', component: UserList, alias: ['/people', 'list'] },
    ],
  },
]

Если маршрут имеет параметры, обязательно включите их в любой абсолютный псевдоним:

js
const routes = [
  {
    path: '/users/:id',
    component: UsersByIdLayout,
    children: [
      // это приведет к отображению UserDetails для этих 3 URL
      // - /users/24
      // - /users/24/profile
      // - /24
      { path: 'profile', component: UserDetails, alias: ['/:id', ''] },
    ],
  },
]

Примечание о SEO: при использовании псевдонимов обязательно определяйте канонические ссылки.

Released under the MIT License.