摘要:定義路由創(chuàng)建實例,然后傳配置創(chuàng)建和掛載根實例。有多種方式可以在路由導(dǎo)航發(fā)生時執(zhí)行鉤子全局的單個路由獨享的或者組件級的。例如,根據(jù)上面的路由配置,這個將會匹配父路由記錄以及子路由記錄。因此,我們需要遍歷來檢查路由記錄中的字段。
Vue-router(路由) 安裝 CDN引入(非打包):
NPM安裝(打包):
npm install vue-router開始使用
在使用Vue.js的時候,我們通過組合組件來組成應(yīng)用程序,現(xiàn)在我們要把vue-router添加進來,只需要將組件(components)映射到路由(routes),然后告訴 vue-router 在哪里渲染它們。
div id="app">Hello App!
Go to Home Go to Foo Go to Bar
例如,我們有一個 User 組件,對于所有 ID 各不相同的用戶,都要使用這個組件來渲染。那么,我們可以在 vue-router 的路由路徑中使用『動態(tài)路徑參數(shù)』(dynamic segment)來達(dá)到這個效果:
div id="app">Hello App!
Go to Foo
Go to Bar
user
借助 vue-router,使用嵌套路由配置,就可以很簡單地表達(dá)組件中的層級關(guān)系
實際上,在上面的動態(tài)路由的例子中就已經(jīng)使用了嵌套了,定義路由時添加一個 children 屬性即可:
const routes=[ { path:"/user", component:User, children:[ { path:":name", component:{ template:"編程式導(dǎo)航pureview" } } ] } ]
router.push(location)除了使用
創(chuàng)建 a 標(biāo)簽來定義導(dǎo)航鏈接,我們還可以借助 router 的實例方法,通過編寫代碼來實現(xiàn)。
想要導(dǎo)航到不同的 URL,則使用 router.push 方法。這個方法會向 history 棧添加一個新的記錄,所以,當(dāng)用戶點擊瀏覽器后退按鈕時,則回到之前的 URL。
// 字符串 router.push("home") // 對象 router.push({ path: "home" }) // 命名的路由 router.push({ name: "user", params: { userId: 123 }}) // 帶查詢參數(shù),變成 /register?plan=private router.push({ path: "register", query: { plan: "private" }})
router.replace(location)
router.go(n)跟 router.push 很像,唯一的不同就是,它不會向 history 添加新記錄,而是跟它的方法名一樣 —— 替換掉當(dāng)前的 history 記錄。
這個方法的參數(shù)是一個整數(shù),意思是在 history 記錄中向前或者后退多少步,類似 window.history.go(n)。
// 在瀏覽器記錄中前進一步,等同于 history.forward() router.go(1) // 后退一步記錄,等同于 history.back() router.go(-1) // 前進 3 步記錄 router.go(3) // 如果 history 記錄不夠用,那就默默地失敗唄 router.go(-100) router.go(100)命名路由
有時候,通過一個名稱來標(biāo)識一個路由顯得更方便一些,特別是在鏈接一個路由,或者是執(zhí)行一些跳轉(zhuǎn)的時候。你可以在創(chuàng)建 Router 實例的時候,在 routes 配置中給某個路由設(shè)置名稱。
const router = new VueRouter({ routes: [ { path: "/user/:userId", name: "user", component: User } ] })
要鏈接到一個命名路由,可以給 router-link 的 to 屬性傳一個對象:
命名視圖User
有時候想同時(同級)展示多個視圖,而不是嵌套展示,例如創(chuàng)建一個布局,有 sidebar(側(cè)導(dǎo)航) 和 main(主內(nèi)容) 兩個視圖,這個時候命名視圖就派上用場了。你可以在界面中擁有多個多帶帶命名的視圖,而不是只有一個多帶帶的出口。如果 router-view 沒有設(shè)置名字,那么默認(rèn)為 default。 一個視圖使用一個組件渲染,因此對于同個路由,多個視圖就需要多個組件。確保正確使用 components 配置(帶上 s):
重定向別名var routes=[ components:{ a:{template:" 首頁,..."}, b:{template:"內(nèi)容部分。。。。"}, } ];
重定向的意思就是當(dāng)你訪問 a 的時候,url 會被替換為 b ,于是匹配路由 b
重定向也是通過 routes 配置來完成,下面例子是從 /a 重定向到 /b:
var router=new VueRouter({ routes:[ { path:"/a", redirect:"/b" } ] })
進階 導(dǎo)航鉤子/a 的別名是 /b,意味著,當(dāng)用戶訪問 /b 時,URL 會保持為 /b,但是路由匹配則為 /a,就像用戶訪問 /a 一樣。
vue-router 提供的導(dǎo)航鉤子主要用來攔截導(dǎo)航,讓它完成跳轉(zhuǎn)或取消。有多種方式可以在路由導(dǎo)航發(fā)生時執(zhí)行鉤子:全局的, 單個路由獨享的, 或者組件級的。
你可以使用 router.beforeEach 注冊一個全局的 before 鉤子:
router .beforeEach((to,from,next)=>{ //... })
鉤子函數(shù)的三個參數(shù):
to: Route: 即將要進入的目標(biāo) 路由對象
from: Route: 當(dāng)前導(dǎo)航正要離開的路由
next: Function: 一定要調(diào)用該方法來 resolve 這個鉤子。執(zhí)行效果依賴 next 方法的調(diào)用參數(shù)。
ext(): 進行管道中的下一個鉤子。如果全部鉤子執(zhí)行完了,則導(dǎo)航的狀態(tài)就是 confirmed (確認(rèn)的)。
next(false): 中斷當(dāng)前的導(dǎo)航。如果瀏覽器的 URL 改變了(可能是用戶手動或者瀏覽器后退按鈕),那么 URL 地址會重置到 from 路由對應(yīng)的地址。
next("/") 或者 next({ path: " / " }): 跳轉(zhuǎn)到一個不同的地址。當(dāng)前的導(dǎo)航被中斷,然后進行一個新的導(dǎo)航。
做了一個簡單的頁面,設(shè)定了一個登陸狀態(tài),如果 isLogin 為false,那么點擊賬戶中心,則跳轉(zhuǎn)到登陸頁進行登陸
路由元信息首頁 關(guān)于我們 登錄 賬戶中心 密碼管理
定義路由的時候可以配置 meta 字段:
const router = new VueRouter({ routes: [ { path: "/foo", component: Foo, children: [ { path: "bar", component: Bar, meta: { requiresAuth: true } } ] } ] })
那么如何訪問這個 meta 字段呢?
首先,我們稱呼 routes 配置中的每個路由對象為 路由記錄。路由記錄可以是嵌套的,因此,當(dāng)一個路由匹配成功后,他可能匹配多個路由記錄。
例如,根據(jù)上面的路由配置,/foo/bar 這個 URL 將會匹配父路由記錄以及子路由記錄。
一個路由匹配到的所有路由記錄會暴露為 $route 對象(還有在導(dǎo)航鉤子中的 route 對象)的 $route.matched 數(shù)組。因此,我們需要遍歷 $route.matched 來檢查路由記錄中的 meta 字段。
下面例子展示在全局導(dǎo)航鉤子中檢查 meta 字段:
router.beforeEach((to, from, next) => { if (to.matched.some(record => record.meta.requiresAuth)) { // 此路由需要驗證,檢查是否登錄 // 如果不需要,則重定向到登錄頁面。 if (!auth.loggedIn()) { next({ path: "/login", query: { redirect: to.fullPath } }) } else { next() } } else { next() // 確保一定要調(diào)用 next() } })
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/88539.html
摘要:而路由則是使用了中新增的事件和事件??偨Y(jié)這一章主要是介紹了如何使用在中構(gòu)建我們的前端路由。 系列目錄地址 一、基礎(chǔ)知識概覽 第一章 - 一些基礎(chǔ)概念(posted at 2018-10-31) 第二章 - 常見的指令的使用(posted at 2018-11-01) 第三章 - 事件修飾符的使用(posted at 2018-11-02) 第四章 - 頁面元素樣式的設(shè)定(posted a...
摘要:前面既然說到了會把文件夾下面的所有文件編譯成路由,那么子路由需要使用文件夾嵌套才行??蛻舳耸状卧L問的頁面會在服務(wù)端做輸出,一旦渲染完成之后,則不會再在服務(wù)端輸出,則會一直在客戶端進行輸出了。 服務(wù)端預(yù)渲染之Nuxt - 使用 現(xiàn)在大多數(shù)開發(fā)都是基于Vue或者React開發(fā)的,能夠達(dá)到快速開發(fā)的效果,也有一些不足的地方,Nuxt能夠在服務(wù)端做出渲染,然后讓搜索引擎在爬取數(shù)據(jù)的時候能夠讀到...
摘要:路由模塊的本質(zhì)就是建立起和頁面之間的映射關(guān)系。這時候我們可以直接利用傳值了使用來匹配路由,然后通過來傳遞參數(shù)跳轉(zhuǎn)對應(yīng)路由配置于是我們可以獲取參數(shù)六配置子路由二級路由實際生活中的應(yīng)用界面,通常由多層嵌套的組件組合而成。 一、前言 要學(xué)習(xí)vue-router就要先知道這里的路由是什么?為什么我們不能像原來一樣直接用標(biāo)簽編寫鏈接哪?vue-router如何使用?常見路由操作有哪些?等等這些問...
摘要:路由模塊的本質(zhì)就是建立起和頁面之間的映射關(guān)系。這時候我們可以直接利用傳值了使用來匹配路由,然后通過來傳遞參數(shù)跳轉(zhuǎn)對應(yīng)路由配置于是我們可以獲取參數(shù)六配置子路由二級路由實際生活中的應(yīng)用界面,通常由多層嵌套的組件組合而成。 一、前言 要學(xué)習(xí)vue-router就要先知道這里的路由是什么?為什么我們不能像原來一樣直接用標(biāo)簽編寫鏈接哪?vue-router如何使用?常見路由操作有哪些?等等這些問...
摘要:路由模塊的本質(zhì)就是建立起和頁面之間的映射關(guān)系。這時候我們可以直接利用傳值了使用來匹配路由,然后通過來傳遞參數(shù)跳轉(zhuǎn)對應(yīng)路由配置于是我們可以獲取參數(shù)六配置子路由二級路由實際生活中的應(yīng)用界面,通常由多層嵌套的組件組合而成。 一、前言 要學(xué)習(xí)vue-router就要先知道這里的路由是什么?為什么我們不能像原來一樣直接用標(biāo)簽編寫鏈接哪?vue-router如何使用?常見路由操作有哪些?等等這些問...
摘要:從長遠(yuǎn)來看,使用插件自動生成路由是具有一定好處的?,F(xiàn)在使用插件來自動生成路由后,就無需再關(guān)心和維護這些路由文件了。 一款自動生成 vue 路由文件的 webpack 插件 vue-route-webpack-plugin 在項目中試點成功了,現(xiàn)在在項目中已經(jīng)不需要再維護路由配置文件了,由插件自動生成,節(jié)省了大家維護路由的時間。 從長遠(yuǎn)來看,使用插件自動生成路由是具有一定好處的。當(dāng)項目中...
閱讀 3470·2021-10-11 11:06
閱讀 2258·2019-08-29 11:10
閱讀 2005·2019-08-26 18:18
閱讀 3310·2019-08-26 13:34
閱讀 1615·2019-08-23 16:45
閱讀 1100·2019-08-23 16:29
閱讀 2859·2019-08-23 13:11
閱讀 3313·2019-08-23 12:58