Vue.js中安裝一個(gè)路由器demo
正文
單頁(yè)應(yīng)用程序是或多或少?gòu)?fù)雜的應(yīng)用程序,它加載一個(gè)單一的HTML頁(yè)面。每當(dāng)用戶與它們互動(dòng)時(shí),它們就會(huì)使用JavaScript動(dòng)態(tài)地更新其內(nèi)容。
JavaScript框架,如React和Vue,使我們能夠非常容易地創(chuàng)建SPA。然而,為了使用Vue.js創(chuàng)建多頁(yè)面的SPA,我們將需要使用一個(gè)路由器。vue-router庫(kù)是Vue.js的官方路由器,也是我們?cè)诒疚闹幸褂玫摹?/p>
在這篇文章中,我們將討論如何在Vue.js中安裝一個(gè)路由器,以及如何創(chuàng)建我們的路由和管理應(yīng)用程序中不同視圖之間的導(dǎo)航的一些基本知識(shí)。讓我們開(kāi)始吧!
什么是vue-router,它是如何工作的?
Vue Router是一個(gè)JavaScript庫(kù),你可以用來(lái)在你的Vue.js應(yīng)用程序中設(shè)置路由。通過(guò)vue-router,你可以定義路由并將其映射到組件。你還可以使用路由器來(lái)管理你的應(yīng)用程序中不同視圖之間的導(dǎo)航。
vue-router的功能與React Router DOM等其他解決方案非常相似,它為我們提供了許多功能:
- 支持HTML5歷史API,實(shí)現(xiàn)干凈的URL。
- 路由的懶散加載。
- 路線參數(shù)、查詢、通配符。
- 由Vue.js的過(guò)渡系統(tǒng)提供的視圖過(guò)渡效果。
如何安裝vue-router庫(kù)
要安裝vue-router,你需要使用你喜歡的Node.js包管理器,無(wú)論是npm還是yarn。在你的終端,和你的項(xiàng)目文件夾內(nèi),你可以運(yùn)行以下命令:
npm install vue-router
或
yarn add vue-router
vue-router安裝后,你將需要在你的Vue.js應(yīng)用程序入口處導(dǎo)入它。例如,如果你使用Vue 3來(lái)創(chuàng)建你的項(xiàng)目,你可以在src/main.js中導(dǎo)入vue-router,如下。
import { createApp } from "vue"; import App from "./App.vue"; import router from "./router/index"; createApp(App).use(router).mount("#app");
自動(dòng)安裝Vue Router
如果你使用Vue CLI來(lái)創(chuàng)建你的新項(xiàng)目,你會(huì)得到一個(gè)選項(xiàng),即從一開(kāi)始就添加一個(gè)路由器。這種選擇也會(huì)給你所有的模板和結(jié)構(gòu),你需要立即開(kāi)始使用所有的路由功能。
然而,這可能并不總是一種選擇。例如,如果你正在使用Vite來(lái)設(shè)置你的項(xiàng)目(一個(gè)越來(lái)越流行的替代方案),或者如果你有一個(gè)以前的項(xiàng)目現(xiàn)在需要擴(kuò)展,你就必須手動(dòng)安裝Vue Router庫(kù),如上一節(jié)所示。
創(chuàng)建一個(gè)基本的vue-router例子
為了使用Vue Router庫(kù)附帶的功能,你需要?jiǎng)?chuàng)建一個(gè)實(shí)例,在你的main.js文件中導(dǎo)入它,并告訴Vue把它作為一個(gè)路由器使用。
為此,你需要?jiǎng)?chuàng)建一個(gè)新的JavaScript文件,在那里你將添加路由器正常工作所需的所有基本代碼。為了簡(jiǎn)單起見(jiàn),我們將創(chuàng)建一個(gè)名為router 的文件夾,里面只有一個(gè)index.js文件,我們將在這里寫(xiě)下我們的路由器的所有代碼。
import { createRouter, createWebHistory } from "vue-router"; const routes = []; const router = createRouter({ history: createWebHistory(import.meta.env.VITE_APP_ENV), routes, }); export default router;
在vue-router中創(chuàng)建路由
在你的項(xiàng)目中安裝和設(shè)置了vue-router后,你可以開(kāi)始創(chuàng)建路由。路由是由HTTP方法和路徑的地圖定義的,并與一個(gè)組件相關(guān)聯(lián)。
在vue-router中,創(chuàng)建路由的方法是使用VueRouter構(gòu)造函數(shù)。這個(gè)函數(shù)接收一個(gè)路由對(duì)象作為參數(shù),我們可以在這里定義我們的路由。路由需要以數(shù)組格式來(lái)定義。
const routes = [ { path: "/", component: HomeComponent }, { path: "/about", component: AboutComponent }, ]
對(duì)于我們想要?jiǎng)?chuàng)建的每個(gè)路由,我們需要在路由數(shù)組中添加一個(gè)對(duì)象。這個(gè)對(duì)象至少要有兩個(gè)屬性:路徑和組件。path屬性對(duì)應(yīng)的是我們想要映射到一個(gè)組件的URL路徑。component屬性是訪問(wèn)路由時(shí)將被渲染的Vue組件。
在上面的例子中,我們定義了兩條路由:一條是主頁(yè)(/),另一條是關(guān)于頁(yè)面(/about)。當(dāng)用戶導(dǎo)航到主頁(yè)時(shí),HomePage 組件將被呈現(xiàn)。同樣地,當(dāng)用戶導(dǎo)航到"/about "時(shí),顯示的將是AboutPage 組件。
當(dāng)然,你必須在Router文件中導(dǎo)入這兩個(gè)組件,才能使這個(gè)例子發(fā)揮作用。
你也可以使用動(dòng)態(tài)導(dǎo)入來(lái)異步加載組件。如果你想懶散地加載組件,這特別有用,這可以提高大型應(yīng)用程序的性能。
在組件中渲染你的視圖
一旦你定義了你的路由,你將需要告訴vue-router在哪里渲染視圖。為此,vue-router為我們提供了**組件。這是一個(gè)占位符,將被替換為與當(dāng)前活動(dòng)路由相關(guān)的組件。
為了使用這個(gè)組件,你需要在你的應(yīng)用程序的某個(gè)地方添加它,一般是在你的App.vue文件的模板中。
<template> <section> <router-view /> </section> </template>
有了這段代碼,當(dāng)用戶導(dǎo)航到/about時(shí),他們將看到AboutPage組件在*中被渲染。*同樣地,當(dāng)他們導(dǎo)航回/(主頁(yè))時(shí),他們會(huì)看到HomePage組件。
用vue-router管理視圖之間的導(dǎo)航
一旦你定義了路由,并插入了*組件,你就可以開(kāi)始使用vue-router在應(yīng)用程序的不同視圖之間進(jìn)行導(dǎo)航。vue-router庫(kù)為我們提供了兩種執(zhí)行導(dǎo)航的方式:router-link和vue-router實(shí)例方法push*。
Router-link是一個(gè)Vue組件,讓我們?cè)趹?yīng)用程序中定義內(nèi)部鏈接。它默認(rèn)渲染一個(gè)*標(biāo)簽,但如果我們向它傳遞一個(gè)標(biāo)簽屬性,它也可以渲染其他類型的元素。例如,我們可以使用來(lái)渲染一個(gè)*元素。
<a rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" target="_blank" ><router-link to="/about" tag="button">Go to About</router-link> </a>
這個(gè)按鈕在被點(diǎn)擊時(shí)將把我們帶到"/about "頁(yè)面,而不需要重新加載我們的應(yīng)用程序。
另一方面,vue-router實(shí)例方法push可以被用來(lái)以編程方式導(dǎo)航到一個(gè)給定的路由。為了使用這個(gè)方法,我們需要有一個(gè)對(duì)vue-router實(shí)例的引用。最簡(jiǎn)單的方法是使用所有Vue組件上的"$router "屬性,如果我們使用選項(xiàng)API的話。
<a rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" target="_blank" >this.$router.push({ path: '/about' }) </a>
或者通過(guò)在我們的組件中創(chuàng)建一個(gè)本地路由器實(shí)例,如果我們使用Composition API的話。
<a rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" target="_blank" >import { useRouter } from 'vue-router'; const router = useRouter(); function redirect() { router.push({ path: '/about' }); } </a>
有了這些代碼,當(dāng)按鈕被點(diǎn)擊時(shí),用戶將被重定向到"/about"。
最后的思考
在這篇文章中,我們回顧了如何在Vue.js應(yīng)用程序中安裝和設(shè)置vue-router。我們還研究了如何在我們的應(yīng)用程序中創(chuàng)建路由并管理不同視圖之間的導(dǎo)航。
以上就是Vue.js中安裝一個(gè)路由器demo的詳細(xì)內(nèi)容,更多關(guān)于Vue.js安裝路由器的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
vue實(shí)現(xiàn)監(jiān)聽(tīng)localstorage值變化
這篇文章主要介紹了vue實(shí)現(xiàn)監(jiān)聽(tīng)localstorage值變化,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08vue watch監(jiān)聽(tīng)變量值的實(shí)時(shí)變動(dòng)示例詳解
這篇文章主要介紹了vue 監(jiān)聽(tīng)變量值的實(shí)時(shí)變動(dòng) watch,使用字符串形式的偵聽(tīng)器函數(shù),還有一種是使用函數(shù)形式的偵聽(tīng)器函數(shù),本文通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08vue 解決數(shù)組賦值無(wú)法渲染在頁(yè)面的問(wèn)題
今天小編就為大家分享一篇vue 解決數(shù)組賦值無(wú)法渲染在頁(yè)面的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10解決vue axios跨域 Request Method: OPTIONS問(wèn)題(預(yù)檢請(qǐng)求)
這篇文章主要介紹了解決vue axios跨域 Request Method: OPTIONS問(wèn)題(預(yù)檢請(qǐng)求),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08vue使用echarts畫(huà)組織結(jié)構(gòu)圖
這篇文章主要介紹了vue使用echarts畫(huà)組織結(jié)構(gòu)圖的示例,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下2021-02-02淺談angular4.0中路由傳遞參數(shù)、獲取參數(shù)最nice的寫(xiě)法
下面小編就為大家分享一篇淺談angular4.0中路由傳遞參數(shù)、獲取參數(shù)最nice的寫(xiě)法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03vue/react單頁(yè)應(yīng)用后退不刷新方案
本文主要介紹了vue/react單頁(yè)應(yīng)用后退不刷新方案,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10在vue.js渲染完界面之后如何再調(diào)用函數(shù)
這篇文章主要介紹了在vue.js渲染完界面之后如何再調(diào)用函數(shù)的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07