VueJS - Маршрутизация

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

Прямая загрузка с CDN

Последняя версия vue-router доступна по адресу https://unpkg.com/vue-router/dist/vue-router.js

Unpkg.com предоставляет cdn-ссылки на основе npm. Приведенная выше ссылка всегда обновляется до последней версии. Мы можем загрузить и разместить его и использовать с тегом скрипта вместе с vue.js следующим образом:

<script src = "/path/to/vue.js"></script>
<script src = "/path/to/vue-router.js"></script>

Использование NPM

Выполните следующую команду, чтобы установить vue-router.

npm  install vue-router

Использование GitHub

Мы можем клонировать репозиторий из GitHub следующим образом:

git clone https://github.com/vuejs/vue-router.git node_modules/vue-router
cd node_modules/vue-router
npm install
npm run build

Начнем с простого примера, используя vue-router.js.

Example

<html>
   <head>
      <title>VueJs Instance</title>
      <script type = "text/javascript" src = "js/vue.js"></script>
      <script type = "text/javascript" src = "js/vue-router.js"></script>
   </head>
   <body>
      <div id = "app">
         <h1>Routing Example</h1>
         <p>
            <router-link to = "/route1">Router Link 1</router-link>
            <router-link to = "/route2">Router Link 2</router-link>
         </p>
         <!-- route outlet -->
         <!-- component matched by the route will render here -->
         <router-view></router-view>
      </div>
      <script type = "text/javascript">
         const Route1 = { template: '<div style = "border-radius:20px;background-color:cyan;width:200px;height:50px;margin:10px;font-size:25px;padding:10px;">This is router 1</div>' }
         const Route2 = { template: '<div style = "border-radius:20px;background-color:green;width:200px;height:50px;margin:10px;font-size:25px;padding:10px;">This is router 2</div>' }
         const routes = [
            { path: '/route1', component: Route1 },
            { path: '/route2', component: Route2 }
         ];
         const router = new VueRouter({
            routes // short for `routes: routes`
         });
         var vm = new Vue({
            el: '#app',
            router
         });
      </script>
   </body>
</html>

Output

Чтобы начать с маршрутизации, нам нужно добавить файл vue-router.js. Возьмите код изhttps://unpkg.com/vue-router/dist/vue-router.js и сохраните его в файле vue-router.js.

Скрипт добавляется после vue.js следующим образом:

<script type = "text/javascript" src = "js/vue.js"></script>
<script type = "text/javascript" src = "js/vue-router.js"></script>

В разделе body есть ссылка на маршрутизатор, определенная следующим образом:

<p>
   <router-link   to = "/route1">Router Link 1</router-link>
   <router-link    to = "/route2">Router Link 2</router-link>
</p>

<router-link>- это компонент, используемый для перехода к содержимому HTML, отображаемому пользователю. Свойство to является местом назначения, то есть исходным файлом, в котором будет выбрано содержимое для отображения.

В приведенном выше фрагменте кода мы создали две ссылки маршрутизатора.

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

const  Route1 = { template: '<div style = "border-radius:20px;background-color:cyan;width:200px;height:50px;margin:10px;font-size:25px;padding:10px;">This is router 1</div>' };
const Route2 = { template: '<div style = "border-radius:20px;background-color:green;width:200px;height:50px;margin:10px;font-size:25px;padding:10px;">This is router 2</div>' }

У них есть шаблоны, которые нужно показывать при нажатии на ссылку маршрутизатора.

Затем идет константа routes, которая определяет путь, который будет отображаться в URL-адресе.

const routes = [
   { path: '/route1', component: Route1 },
   { path: '/route2', component: Route2 }
];

Маршруты определяют путь и компонент. Путь т.е./route1 будет отображаться в URL-адресе, когда пользователь щелкает ссылку маршрутизатора.

Компонент принимает имена шаблонов для отображения. Путь от маршрутов должен совпадать со ссылкой маршрутизатора на свойство.

Например, <router-link to = ”path here”> </router-link>

Затем создается экземпляр VueRouter с использованием следующего фрагмента кода.

const router = new VueRouter({
   routes // short for `routes: routes`
});

Конструктор VueRouter принимает маршруты в качестве параметра. Объект маршрутизатора назначается основному экземпляру vue с помощью следующего фрагмента кода.

var vm = new Vue({
   el: '#app',
   router
});

Выполните пример и просмотрите отображение в браузере. Проверив и проверив ссылку маршрутизатора, мы обнаружим, что он добавляет класс к активному элементу, как показано на следующем снимке экрана.

Добавлен класс class = “router-link-exact-active router-link-active”. Активная ссылка получает класс, как показано на скриншоте выше. Еще одно замечание: <router-link> отображается как тег.

Подставки для Router Link

Давайте посмотрим еще несколько свойств, которые нужно передать в <router-link>.

к

Это путь назначения, указанный для <router-link>. При нажатии значение to будет передано в router.push () внутренне. Значение должно быть строкой или объектом местоположения. При использовании объекта нам необходимо привязать его, как показано, например, в 2.

e.g. 1:  <router-link to = "/route1">Router Link 1</router-link>
renders as
<a href = ”#/route”>Router Link </a>
e.g. 2:  <router-link v-bind:to = "{path:'/route1'}">Router Link 1</router-link>
e.g. 3: <router-link v-bind:to =
   "{path:'/route1', query: { name: 'Tery' }}">Router Link 1</router-link>//router link with query string.

Ниже приведен результат, например, 3.

В URL-пути name = Tery является частью строки запроса. Например: http: //localhost/vueexamples/vue_router.html#/route1? Name = Tery

заменить

Добавление замены к ссылке маршрутизатора вызовет router.replace() вместо router.push(). При замене история переходов не сохраняется.

Example

<router-link v-bind:to = "{path:'/route1', query: { name: 'Tery' }}"   replace>Router Link 1</router-link>

добавить

Добавление добавления к <router-link> <router-link> сделает путь относительным.

Если мы хотим перейти от ссылки маршрутизатора с path / route1 к пути ссылки маршрутизатора / route2, он отобразит путь в браузере как / route1 / route2.

Example

<router-link v-bind:to = "{ path: '/route1'}" append>Router Link 1</router-link>

тег

В настоящее время <router-link> отображается как тег. В случае, если мы хотим отобразить его как какой-то другой тег, нам нужно указать то же самое, используя tag = ”tagname”;

Example

<p>
   <router-link v-bind:to = "{ path: '/route1'}" tag = "span">Router Link 1</router-link>
   <router-link v-bind:to = "{ path: '/route2'}" tag = "span">Router Link 2</router-link>
</p>

Мы указали тег как span, и это то, что отображается в браузере.

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

активный класс

По умолчанию активный класс, добавляемый, когда канал маршрутизатора активен, имеет значение router-link-active. Мы можем перезаписать класс, установив то же самое, что показано в следующем коде.

<style>
   ._active{
      background-color : red;
   }
</style>
<p>
   <router-link v-bind:to = "{ path: '/route1'}" active-class = "_active">Router Link 1</router-link>
   <router-link v-bind:to = "{ path: '/route2'}" tag = "span">Router Link 2</router-link>
</p>

Используемый класс - active_class = ”_active”. Это результат, отображаемый в браузере.

точный активный класс

Применяемый по умолчанию класс specificactive - router-link-точный-активный. Мы можем перезаписать его, используя точный активный класс.

Example

<p>
   <router-link v-bind:to = "{ path: '/route1'}" exact-active-class = "_active">Router Link 1</router-link>
   <router-link v-bind:to = "{ path: '/route2'}" tag = "span">Router Link 2</router-link>
</p>

Это то, что отображается в браузере.

событие

В настоящее время событием по умолчанию для router-link является событие click. Мы можем изменить то же самое, используя свойство события.

Example

<router-link v-bind:to = "{ path: '/route1'}" event = "mouseover">Router Link 1</router-link>

Теперь, когда мы наведем курсор мыши на ссылку маршрутизатора, он будет перемещаться, как показано в следующем браузере. Наведите указатель мыши на ссылку 1 маршрутизатора, и мы увидим изменение навигации.