如何在Vue項(xiàng)目中實(shí)現(xiàn)一個(gè)路由跳轉(zhuǎn)和嵌套功能

這篇文章主要介紹了如何在Vue項(xiàng)目中實(shí)現(xiàn)一個(gè)路由跳轉(zhuǎn)和嵌套功能,此處通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考價(jià)值,需要的朋友可以參考下:

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了南雄免費(fèi)建站歡迎大家使用!

Vue的優(yōu)點(diǎn)

Vue具體輕量級框架、簡單易學(xué)、雙向數(shù)據(jù)綁定、組件化、數(shù)據(jù)和結(jié)構(gòu)的分離、虛擬DOM、運(yùn)行速度快等優(yōu)勢,Vue中頁面使用的是局部刷新,不用每次跳轉(zhuǎn)頁面都要請求所有數(shù)據(jù)和dom,可以大大提升訪問速度和用戶體驗(yàn)。

一、配置 Router

 用 vue-cli 創(chuàng)建的初始模板里面,并沒有 vue-router,需要通過 npm 安裝

cnpm i vue-router -D

安裝完成后,在 src 文件夾下,創(chuàng)建一個(gè) routers.js 文件,和 main.js 平級

然后在 router.js 中引入所需的組件,創(chuàng)建 routers 對象

import Home from './components/home.vue'

const routers = [
 {
 path: '/home',
 name: 'home',
 component: Home
 },
 {
 path: '/',
 component: Home
 },
]
export default routers

在創(chuàng)建的 routers 對象中, path 配置了路由的路徑,component 配置了映射的組件

需要注意的是,export default routers 必須寫在文件底部,而且后面還需要接一空行,否則無法通過 ESlint 語法驗(yàn)證

然后 main.js 也需要修改:

import Vue from 'vue'
import VueRouter from 'vue-router'
import routers from './routers'
import App from './App'

Vue.use(VueRouter)

const router = new VueRouter({
 mode: 'history',
 routes: routers
})

new Vue({
 el: '#app',
 router,
 render: h => h(App)
})

在創(chuàng)建的 router 對象中,如果不配置 mode,就會(huì)使用默認(rèn)的 hash 模式,該模式下會(huì)將路徑格式化為 #! 開頭。

添加 mode: 'history' 之后將使用 HTML5 history 模式,該模式下沒有 # 前綴,而且可以使用 pushState 和 replaceState 來管理記錄。

關(guān)于 html5 history 模式的更多內(nèi)容,可以參考官方文檔:https://router.vuejs.org/zh-cn/essentials/history-mode.html

二、嵌套路由

在這個(gè)實(shí)例中,為了加深項(xiàng)目層級,App.vue 只是作為一個(gè)存放組件的容器:

如何在Vue項(xiàng)目中實(shí)現(xiàn)一個(gè)路由跳轉(zhuǎn)和嵌套功能

其中 <router-view> 是用來渲染通過路由映射過來的組件,當(dāng)路徑更改時(shí),<router-view> 中的內(nèi)容也會(huì)發(fā)生更改

上面已經(jīng)配置了兩個(gè)路由,當(dāng)打開 http://localhost:8080 或者 http://localhost:8080/home 的時(shí)候,就會(huì)在 <router-view> 中渲染 home.vue 組件 

home.vue 是真正的父組件,first.vue、login.vue 等子組件都會(huì)渲染到 home.vue 中的 <router-view>

如何在Vue項(xiàng)目中實(shí)現(xiàn)一個(gè)路由跳轉(zhuǎn)和嵌套功能

如此一來,就需要在一級路由中嵌套二級路由,修改 routers.js

import Home from './components/home.vue'
import First from './components/children/first.vue'
import Login from './components/children/login.vue'

const routers = [
 {
 path: '/',
 component: Home,
   children: [ 
   { 
    path: '/', 
     component: Login 
   }
  ]
 },
 {
 path: '/home',
 name: 'home',
 component: Home,
 children: [
  {
  path: '/',
  name: 'login',
  component: Login
  },
  {
  path: 'first',
  name: 'first',
  component: First
  } 
 ]
 }
]

export default routers

在配置的路由后面,添加 children,并在 children 中添加二級路由,就能實(shí)現(xiàn)路由嵌套

配置 path 的時(shí)候,以 " / " 開頭的嵌套路徑會(huì)被當(dāng)作根路徑,所以子路由的 path 不需要添加 " / "

三、使用 <router-link> 映射路由

home.vue 中引入了 header.vue 組件,其中含有導(dǎo)航菜單

當(dāng)點(diǎn)擊導(dǎo)航菜單的時(shí)候,會(huì)切換 home.vue 中 <router-view> 中的內(nèi)容

這種只需要跳轉(zhuǎn)頁面,不需要添加驗(yàn)證方法的情況,可以使用 <router-link> 來實(shí)現(xiàn)導(dǎo)航的功能:

如何在Vue項(xiàng)目中實(shí)現(xiàn)一個(gè)路由跳轉(zhuǎn)和嵌套功能

在編譯之后,<router-link> 會(huì)被渲染為 <a> 標(biāo)簽, to 會(huì)被渲染為 href,當(dāng) <router-link> 被點(diǎn)擊的時(shí)候,url 會(huì)發(fā)生相應(yīng)的改變

如果使用 v-bind 指令,還可以在 to 后面接變量,配合 v-for 指令可以渲染導(dǎo)航菜單

 如果對于所有 ID 各不相同的用戶,都要使用 home 組件來渲染,可以在 routers.js 中添加動(dòng)態(tài)參數(shù):

{ 
 path: '/home/:id',
 component: Home
}

這樣 "/home/user01"、"/home/user02"、"/home/user03" 等路由,都會(huì)映射到 Home 組件

然后還可以使用 $route.params.id 來獲取到對應(yīng)的 id

四、編程式導(dǎo)航

實(shí)際情況下,有很多按鈕在執(zhí)行跳轉(zhuǎn)之前,還會(huì)執(zhí)行一系列方法,這時(shí)可以使用 this.$router.push(location) 來修改 url,完成跳轉(zhuǎn)

如何在Vue項(xiàng)目中實(shí)現(xiàn)一個(gè)路由跳轉(zhuǎn)和嵌套功能

如何在Vue項(xiàng)目中實(shí)現(xiàn)一個(gè)路由跳轉(zhuǎn)和嵌套功能

push 后面可以是對象,也可以是字符串:

// 字符串
this.$router.push('/home/first')

// 對象
this.$router.push({ path: '/home/first' })

// 命名的路由
this.$router.push({ name: 'home', params: { userId: wise }})

五、前車之鑒

在學(xué)習(xí)的過程中,遇到一個(gè)困擾許久的問題,大概是從 first 組件跳轉(zhuǎn)回 login 之后,無法再跳轉(zhuǎn)回去。但是 url 已經(jīng)被修改,刷新頁面也能正常顯示。

如何在Vue項(xiàng)目中實(shí)現(xiàn)一個(gè)路由跳轉(zhuǎn)和嵌套功能

這是因?yàn)槲以?first.vue 組件中的 data 里面沒有寫 return

 如何在Vue項(xiàng)目中實(shí)現(xiàn)一個(gè)路由跳轉(zhuǎn)和嵌套功能 如何在Vue項(xiàng)目中實(shí)現(xiàn)一個(gè)路由跳轉(zhuǎn)和嵌套功能

在 vue 組件中,data 必須寫為函數(shù),且需要用 return 來返回參數(shù)。但是當(dāng) data 為空時(shí),即使不寫 return 也不會(huì)報(bào)錯(cuò),所以導(dǎo)致了上面的問題。

到此這篇關(guān)于如何在Vue項(xiàng)目中實(shí)現(xiàn)一個(gè)路由跳轉(zhuǎn)和嵌套功能的文章就介紹到這了,更多相關(guān)如何在Vue項(xiàng)目中實(shí)現(xiàn)一個(gè)路由跳轉(zhuǎn)和嵌套功能的內(nèi)容請搜索創(chuàng)新互聯(lián)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持創(chuàng)新互聯(lián)!

新聞標(biāo)題:如何在Vue項(xiàng)目中實(shí)現(xiàn)一個(gè)路由跳轉(zhuǎn)和嵌套功能
當(dāng)前URL:http://bm7419.com/article46/jccphg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、服務(wù)器托管、網(wǎng)頁設(shè)計(jì)公司、手機(jī)網(wǎng)站建設(shè)、微信小程序靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)