Logo Zephyrnet

Hướng dẫn đến Bộ định tuyến Vue

Ngày:

Giới thiệu

Khi phát triển các ứng dụng web với Vue.js, trừ khi bạn đang xây dựng Ứng dụng một trang (SPA), bạn sẽ muốn kết nối nhiều trang với một trang đích để cho phép người dùng điều hướng qua chúng. Điều này được gọi là định tuyến.

Định tuyến là quá trình người dùng được điều hướng đến các trang khác nhau trên một trang web. Vue.js là một khung JavaScript được sử dụng để tạo Ứng dụng Trang Đơn, có nghĩa là ứng dụng này chỉ được tải một lần từ máy chủ đến trình duyệt và trình duyệt không cần tải lại khi định tuyến; thay vào đó, nó chỉ yêu cầu các trang này và chúng được tải.

Trong hướng dẫn này, chúng ta sẽ học cách định tuyến với Vue.js và đi sâu vào các loại định tuyến khác nhau có thể được thực hiện và cách chúng có thể được thực hiện.

Bắt đầu

Định tuyến trong Vue.js được thực hiện với Bộ định tuyến Vue, hoạt động song song với thư viện Vue lõi để cho phép chúng tôi thiết lập hệ thống định tuyến. Chúng tôi muốn sử dụng vue-router trong hai tình huống trong dự án của chúng tôi. Chúng tôi muốn sử dụng bộ định tuyến trong một dự án hiện có hoặc thêm nó trong khi tạo một dự án mới.

Thiết lập bộ định tuyến Vue trong dự án hiện có

Tích hợp vue-router vào một dự án hiện tại có thể là kỹ thuật, và chúng ta sẽ xem xét các chi tiết này ngay bây giờ. Bước đầu tiên sẽ là cài đặt gói bộ định tuyến vue bằng lệnh sau:

! npm install [email protected]

Sau khi cài đặt, điều hướng đến src thư mục và tạo một thư mục có tên router, theo sau là một tệp có tên index.js trong router thư mục này sẽ đóng vai trò là tệp cấu hình bộ định tuyến của chúng tôi. Của chúng tôi src thư mục bây giờ sẽ trông như thế này:

Trong tạp chí index.js , hãy đảm bảo rằng chúng tôi dán mã bên dưới, là mã cấu hình bộ định tuyến:

import { createRouter, createWebHashHistory } from 'vue-router'
import HomePage from '../views/HomePage.vue'

const routes = [
   {
      path: '/',
      name: 'home',
      component: HomePage
   },
]

const router = createRouter({
   history: createWebHashHistory(),
   routes
})
export default router

Chúng tôi có một routes mảng có chứa một đối tượng, có thể là nhiều đối tượng trong đó mỗi đối tượng đại diện cho một tuyến đường. Hiện tại, chúng tôi chỉ tạo một cái sẽ chuyển hướng đến thành phần trang chủ.

Mỗi cái routes các đối tượng thường bao gồm path, là đường dẫn url liên quan đến gốc của trang web, name, đóng vai trò như một số nhận dạng và component, mà chúng tôi đã nhập ở đầu trang.

Ngoài mảng định tuyến, chúng tôi thiết lập phiên bản bộ định tuyến ở dưới cùng bằng cách tạo createRouter() chức năng và truyền vào history các giá trị quan trọng và routes mảng, và sau đó chúng tôi xuất router ví dụ để sử dụng trong ứng dụng của chúng tôi.

Để sử dụng cấu hình bộ định tuyến này trong ứng dụng của chúng tôi, hãy mở main.js tập tin trong src thư mục, import router from "./router", và sau đó thêm .use(router) giữa createApp(App).mount('#app') giống như nó ở bên dưới:

import router from './router'

createApp(App).use(router).mount('#app')

T vue-router đã được định cấu hình toàn cầu trong ứng dụng của chúng tôi và bước tiếp theo là sử dụng nó trong ứng dụng của chúng tôi. Điều này có thể dễ dàng thực hiện bằng cách bao gồm <router-view /> trong App.js thẻ mẫu, chỉ hiển thị tuyến đường phù hợp:

<!--App.vue -->
<template>


   <router-view />

</template>

<script>
   export default {
      name: 'App',
   }
</script>
Thiết lập các tuyến đường trong Vue.js

Các tuyến đường thường được tạo trong router/index.js mảng các tuyến của tệp và các tuyến này kết nối với các thành phần. Một thực tiễn tốt là tạo một thư mục dạng xem nơi tất cả các dạng xem trang sẽ được lưu trữ. Ví dụ:

thiết lập các tuyến đường trong vue

Tại thời điểm này, chúng tôi đã biết cách thiết lập các tuyến đường theo cách thủ công.

Lưu ý: Tất cả những điều này sẽ được thực hiện cho chúng tôi nếu chúng tôi sử dụng vue-cli để cài đặt vue-router khi tạo dự án của chúng tôi.

Cài đặt bộ định tuyến Vue với Vue CLI

Nếu chúng tôi sắp tạo một dự án mới và tin rằng chúng tôi sẽ sử dụng vue-router, làm như vậy sẽ dễ dàng hơn trong khi tạo dự án.

Tất cả những gì chúng ta phải làm là sử dụng Vue CLI để cài đặt phiên bản mới nhất của vue-router trong khi chọn thủ công các tính năng trong quá trình tạo dự án của chúng tôi:

vue cli thiết lập bộ định tuyến vue

Đọc và tìm hiểu thêm về cách tạo dự án Vue.js thông qua Hướng dẫn về Vue CLI!

Các tuyến đường tải lười biếng với bộ định tuyến Vue

Khi ứng dụng của chúng tôi tăng kích thước, kích thước gói cũng tăng lên, khiến trang web của chúng tôi tải lâu hơn. Chúng ta có thể sử dụng vue-router triển khai tải chậm để tránh tải một số tuyến đường cụ thể cho đến khi người dùng yêu cầu cụ thể.

Điều này thường được thực hiện trong tệp cấu hình bộ định tuyến bằng cách xóa import ở trên cùng và thay thế nó bằng một câu lệnh nhập động trong tùy chọn thành phần của tuyến đường của chúng tôi:

import { createRouter, createWebHashHistory } from 'vue-router';
const routes = [
   {
      path: '/',
      name: 'home',
      component: () =>
         import( '../views/HomePage.vue'),
   },
   {
      path: '/about',
      name: 'about',
      component: () =>
         import( '../views/AboutPage.vue'),
   },
];
const router = createRouter({
   history: createWebHashHistory(),
   routes,
});
export default router;

Cho đến nay, chúng tôi đã có thể tạo các tuyến đường, nhưng làm cách nào để chúng tôi điều hướng trong ứng dụng của mình? Chúng tôi sử dụng <router-link> thẻ thay vì <a> phần tử trong HTML để xử lý định tuyến.

Ví dụ: nếu chúng tôi muốn tạo một thanh điều hướng ở đầu ứng dụng của mình, chúng tôi có thể thực hiện việc này trong App.js tập tin phía trên <router-view/> thẻ để nó hiển thị trên tất cả các tuyến đường:

<nav>
   <router-link to="/">Home</router-link> |
   <router-link to="/about">About</router-link>
</nav>

Liên kết bộ định tuyến chấp nhận to='path' thuộc tính đưa người dùng đến đường dẫn của thành phần như đã đặt khi định cấu hình đường dẫn. Điều này hoạt động giống như href='path``' thuộc tính trong HTML.

Sử dụng các tuyến đường được đặt tên

Sử dụng các tuyến đường đã đặt tên cho phép chúng tôi vượt qua name khóa có quyền truy cập vào name thuộc tính mà chúng tôi đặt trong khi định cấu hình các tuyến thay vì sử dụng đường dẫn bằng cách liên kết dữ liệu theo cách này:

Xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, các tiêu chuẩn được ngành công nghiệp chấp nhận và bảng lừa đảo đi kèm. Dừng lệnh Googling Git và thực sự học nó!

<router-link :to="{ name: 'About' }">About</router-link>

Một lợi thế của việc sử dụng phương pháp này là trong trường hợp chúng tôi quyết định thay đổi đường dẫn đường dẫn cho các ứng dụng lớn của mình, chúng ta không cần phải bắt đầu thay đổi tất cả đường dẫn liên kết có thể phức tạp.

Định tuyến động

Các tình huống có thể phát sinh yêu cầu sử dụng định tuyến động để tránh lặp lại trang không cần thiết. Ví dụ: giả sử chúng ta có một danh sách các loại trái cây và chúng tôi muốn người dùng có thể nhấp vào một loại trái cây cụ thể và chỉ thông tin chi tiết về loại trái cây đó được hiển thị trên trang chi tiết về trái cây. Trong trường hợp này, chúng tôi sử dụng định tuyến động.

Chúng tôi sẽ có hai trang - một trang để giới thiệu các loại trái cây trong danh sách và một trang để hiển thị chi tiết của từng loại trái cây, đó là trang “bản thiết kế” để điền các chi tiết của trái cây. Chúng tôi sẽ tạo các trang trong thư mục Vue và sau đó thêm các tuyến đường vào routes mảng:

import FruitsPage from '../views/FruitsPage.vue';
import FruitDetails from '../views/FruitDetails.vue';

const routes = [
   {
      path: '/fruits',
      name: 'Fruits',
      component: FruitsPage,
   },
   {
      path: '/fruits/:id',
      name: 'FruitDetails',
      component: FruitDetails,
   },
];

Chúng tôi sẽ nhận thấy rằng FruitDetails trang, chúng tôi đã thêm một động id tài sản để nó có được id và sử dụng nó để truy vấn dữ liệu cụ thể hiển thị trên trang đó bằng cách sử dụng $route.params trong mẫu của chúng tôi, do đó làm cho tuyến đường động.

Trong tạp chí FruitsPage, giả sử chúng ta có một mảng các loại quả mà chúng ta lặp vào ứng dụng của mình, chúng ta có thể bọc mỗi quả bằng một liên kết cùng với các tham số theo cách này:

<!-- FruitsPage.vue -->

<template>
   <h1>Fruits page</h1>
   <div :key="fruit.id" v-for="fruit in fruits">
      // dynamic linking by attaching the id as params
      <router-link :to="{ name: 'FruitDetails', params: { id: fruit.id } }">
         <h3>{{ fruit.name }}</h3>
      </router-link>
   </div>
</template>

<script>
   export default {
      data() {
         return {
            fruits: [
               {
                  id: 1,
                  name: 'Apple',
                  description:
                     "Apples are an incredibly nutritious fruit.",
               },
               {
                  id: 2,
                  name: 'Mango',
                  description:
                     'A mango is an edible stone fruit produced by the tropical.',
               },
               {
                  id: 3,
                  name: 'Banana',
                  description:
                     'A banana is an elongated, edible fruit of the genus Musa.',
               },
            ],
         };
      },
   };
</script>

Tại thời điểm này, khi người dùng nhấp vào từng trái cây, nó sẽ đưa họ đến FruitDetails trang nơi chúng tôi có thể truy cập id và sử dụng nó để xác định các chi tiết của trái cây cần được hiển thị trong FruitDetails .

Truy cập các thông số tuyến đường

Cho đến nay, chúng ta đã thấy cách truyền động các tham số đến một trang cụ thể, bây giờ hãy xem cách chúng ta có thể truy cập thông số đó trong FruitDetails trang. Có hai cách để chúng ta có thể truy cập các tham số trong Vue - thông qua $route.params hoặc sử dụng các đạo cụ:

Sử dụng $ route.params

Các thông số có thể truy cập trực tiếp qua $route.params:

<template>
   <h1>Fruit Details</h1>
   <p>This is fruit with the id of {{ $route.params.id }}</p>
</template>

Hoặc chúng tôi có thể truy cập nó trong data() phương pháp sử dụng this:

<template>
   <h1>Fruit Details</h1>
   <p>This is fruit with the id of {{ id }}</p>
</template>

<script>
   export default {
      data() {
         return {
            id: this.$route.params.id,
         };
      },
   };
</script>
Sử dụng Vue Props

Một phương pháp dễ dàng khác để truy cập dữ liệu động qua các tuyến đường là sử dụng đạo cụ. Đầu tiên chúng ta phải thiết lập props đến true trong đối tượng cấu hình các tuyến đường:

{
   path: '/fruits/:id',
   name: 'FruitDetails',
   component: FruitDetails,
   props: true,
},

Bằng cách này, tất cả những gì chúng ta phải làm tiếp theo là thêm props tùy chọn cho script và sau đó sử dụng các đạo cụ trong template nhãn:

<template>
   <h1>Fruit Details</h1>
   <p>This is fruit with the id of {{ id }}</p>
</template>

<script>
   export default {
      props: ['id'],
   };
</script>

404 lỗi - Không tìm thấy tuyến đường

Trong trường hợp người dùng điều hướng đến một tuyến không tồn tại, Vue sẽ tải trang nhưng không có bất kỳ thành phần nào, tạo ra một trang trống. Trong trường hợp này, điều tốt nhất nên làm là hiển thị trang 404 có lẽ là một nút dẫn họ đến trang chủ hoặc bất cứ nơi nào chúng tôi tin rằng họ muốn đến.

Điều này có thể dễ dàng xử lý bằng cách tạo một thành phần cho trang 404 của chúng tôi và sau đó thêm một tuyến đường 404 vào mảng các tuyến đường của tệp cấu hình bộ định tuyến của chúng tôi, nhưng lần này chúng tôi sẽ sử dụng một biểu thức chính quy để bắt tất cả các tuyến đường chưa được khai báo trước đó:

{
   path: '/:catchAll(.*)',
   name: 'ErrorPage',
   component: ErrorPage,
}

Sản phẩm :catchAll là phân đoạn động nhận một biểu thức chính quy của (.*) trong đó Bộ định tuyến Vue sử dụng để kiểm tra xem tuyến đường mà người dùng điều hướng đến có được xác định trong tệp cấu hình bộ định tuyến của chúng tôi hay không. Nếu các tuyến như vậy không tồn tại, người dùng sẽ được chuyển hướng đến thành phần, trong trường hợp của chúng tôi là ErrorPage thành phần:

<template>
   <h2>404 Page</h2>
   <p>This is a 404 page</p>
   <p>Visit home page <router-link to="/">here</router-link></p>
</template>

← liên kết

Trong tình huống mà chúng tôi muốn người dùng được chuyển hướng khi họ truy cập một tuyến đường cụ thể, chẳng hạn như nếu chúng tôi có một tuyến đường cũ mà chúng tôi không còn sử dụng nữa, chúng tôi muốn người dùng được chuyển hướng đến tuyến đường mới khi họ truy cập tuyến đường đó. Điều này có thể dễ dàng thực hiện bằng cách thêm một đối tượng mới vào mảng cấu hình các tuyến đường của chúng tôi, với redirect cánh đồng:

{
   path: '/fruits',
   name: 'Fruits',
   component: FruitsPage,
},
{
   path: '/all-frults',
   redirect: '/fruits',
},

Tất cả những gì đoạn mã trên thực hiện là nếu người dùng truy cập, đường dẫn /all-fruits, nó sẽ chuyển hướng họ đến /fruits tuyến đường.

Điều hướng có lập trình

Cho đến nay, chúng tôi đã học được rất nhiều về định tuyến, nhưng có một điều nữa bạn sẽ muốn biết: cách thực hiện điều hướng có lập trình. Chúng tôi định nghĩa điều hướng có lập trình là tình huống trong đó người dùng được chuyển hướng / chuyển hướng dựa trên một hành động cụ thể xảy ra trên một tuyến đường, chẳng hạn như hành động đăng nhập hoặc đăng ký hoặc bằng cách nhấp vào một nút cụ thể, chẳng hạn như nút “quay lại”.

Lịch sử bộ định tuyến

Chúng tôi có thể sử dụng lịch sử trình duyệt để dễ dàng điều hướng ngược hoặc chuyển tiếp, tùy thuộc vào sở thích của chúng tôi. Nếu bạn nhớ lại, chúng tôi có một createRouter() trong tệp cấu hình bộ định tuyến nơi chúng tôi đặt history giá trị, cho phép bộ định tuyến Vue theo dõi lịch sử bộ định tuyến của chúng tôi khi chúng tôi định tuyến qua ứng dụng web.

Điều này cho phép chúng tôi xem qua lịch sử của trình duyệt, dựa trên một điều kiện, chẳng hạn như một lần nhấp vào nút:

<template>
   <h1>Fruit Details</h1>
   <p>This is fruit with the id of {{ id }}</p>
   <button @click="goBack">Go Back</button>
</template>

<script>
   export default {
      props: ['id'],
      methods:{
         goBack(){
            this.$router.go(-1)
         }
      }
   };
</script>

Chúng tôi cũng có thể quyết định đi tiếp bằng cách sử dụng 1 thay vì -1 và giả sử chúng ta muốn di chuyển bằng 2 bước, chúng ta có thể sử dụng 2 or -2.

Đẩy

push() thường được sử dụng sau khi một hành động đã xảy ra và thêm một mục mới vào ngăn xếp lịch sử. Ví dụ: nếu người dùng đăng nhập thành công, chúng tôi muốn được điều hướng đến trang bảng điều khiển theo chương trình. Điều này được thực hiện bằng cách bao gồm phương thức đẩy cùng với tên của tuyến đường:

this.$router.push({ name: 'Dashboard' });

Lưu ý: Chúng tôi phải đảm bảo rằng tuyến được khai báo trong tệp cấu hình bộ định tuyến của chúng tôi, nếu không nó sẽ không hoạt động và sẽ chuyển hướng chúng tôi đến trang 404.

Kết luận

Định tuyến là một trong những chức năng cốt lõi của Vue. Trừ khi bạn đang xây dựng một Ứng dụng một trang (SPA), bạn sẽ muốn kết nối nhiều trang với một trang đích để cho phép người dùng điều hướng qua chúng.

Trong hướng dẫn này, chúng tôi đã xem xét định tuyến là gì, cách bạn có thể cài đặt vue-router trong các dự án mới và hiện có, cách thực hiện tải chậm, điều hướng giữa các tuyến đường, thực hiện định tuyến động, truy cập các thông số tuyến đường và điều hướng theo chương trình peform.

tại chỗ_img

Tin tức mới nhất

tại chỗ_img

Trò chuyện trực tiếp với chúng tôi (chat)

Chào bạn! Làm thế nào để tôi giúp bạn?