日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Vue路由vue-router詳細講解指南

瀏覽:29日期:2022-09-30 13:59:25

中文文檔:https://router.vuejs.org/zh/

Vue Router 是Vue.js官方的路由管理器。它和 Vue.js 的核心深度集成,讓構建單頁面應用變得易如反掌。路由實際上就是可以理解為指向,就是我在頁面上點擊一個按鈕需要跳轉到對應的頁面,這就是路由跳轉;

首先我們來學習三個單詞(route,routes,router):

route:首先它是個單數,譯為路由,即我們可以理解為單個路由或者某一個路由; routes:它是個復數,表示多個的集合才能為復數;即我們可以理解為多個路由的集合,JS中表示多種不同狀態的集合的形式只有數組和對象兩種,事實上官方定義routes是一個數組;所以我們記住了,routes表示多個數組的集合; router:譯為路由器,上面都是路由,這個是路由器,我們可以理解為一個容器包含上述兩個或者說它是一個管理者,負責管理上述兩個;舉個常見的場景的例子:當用戶在頁面上點擊按鈕的時候,這個時候router就會去routes中去查找route,就是說路由器會去路由集合中找對應的路由;

我們結合一個小demo來看(文章有點長,耐心慢慢看,學得慢才能進步的快,當然可以跟著一起敲):

首先需要安裝vue-cli來構建一個vue的開發環境(怎么安裝這里不講,自己百度去,如果這種問題自己都解決不了的話,后面的知識可能對你來說收益不大)

安裝完vue-cli之后,我們的項目目錄結構如下:

Vue路由vue-router詳細講解指南

然后我們在命令行中輸入npm install vue-router -g來安裝vue-router,安裝完之后我們可以打開package.json文件,在package.json文件中可以看到vue-router的版本號;

Vue路由vue-router詳細講解指南

到這一步我們的準備工作就完成了,要進行寫demo了;

我們在src目錄下新建三個文件,分別為page1.vue和page2.vue以及router.js:

page1.vue:

<template> <div><h1>page1</h1><p>{{msg}}</p> </div></template><script> export default {data () { return {msg: '我是page1組件' }} }</script>

page2.vue:

<template> <div><h1>page2</h1><p>{{msg}}</p> </div></template><script> export default {data () { return {msg: '我是page2組件' }} }</script>

router.js

//引入vueimport Vue from ’vue’;//引入vue-routerimport VueRouter from ’vue-router’;//第三方庫需要use一下才能用Vue.use(VueRouter)//引用page1頁面import page1 from ’./page1.vue’;//引用page2頁面import page2 from ’./page2.vue’;//定義routes路由的集合,數組類型const routes=[ //單個路由均為對象類型,path代表的是路徑,component代表組件 {path:’/page1’,component:page1}, {path:'/page2',component:page2}]//實例化VueRouter并將routes添加進去const router=new VueRouter({//ES6簡寫,等于routes:routes routes});//拋出這個這個實例對象方便外部讀取以及訪問export default router

這里我們再修改一下main.js

import Vue from ’vue’import App from ’./App’//引用router.jsimport router from ’./router.js’Vue.config.productionTip = false/* eslint-disable no-new */new Vue({ el: ’#app’,//一定要注入到vue的實例對象上 router, components: { App }, template: ’<App/>’})

修改App.vue

<template> <div id='app'> <img src='http://www.b3g6.com/bcjs/assets/logo.png'> <div>//router-link定義頁面中點擊觸發部分 <router-link to='/page1'>Page1</router-link> <router-link to='/page2'>Page2</router-link> </div>//router-view定義頁面中顯示部分 <router-view></router-view> </div></template><script>export default { name: ’App’}</script><style>#app { font-family: ’Avenir’, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px;}</style>

就這樣,我們的頁面就可以進行路由跳轉和切換了,路由的基本使用就完成了;但是有個問題就是我們第一次進去是看不到路由頁面的,這是因為我們沒有設置默認值,我們首次進入的時候路徑是為空的,那么我們可以這么解決:

router.js

import Vue from ’vue’;import VueRouter from ’vue-router’;Vue.use(VueRouter)import page1 from ’./page1.vue’;import page2 from ’./page2.vue’;import user from ’./user.vue’const routes=[ {path:’/page1’,component:page1}, {path:'/page2',component:page2}, //可以配置重定向 {path:’’,redirect:'page1'} //或者重新寫個路徑為空的路由 {path:'',component:page1}]const router=new VueRouter({ routes});export default router

上面的兩種解決方案都是可以解決的,配置重定向的意思就是當匹配到路徑為空的時候,就會重定向到page1,執行page1的路由;或者我們也可以重新配置個路由,路徑為空的時候router-view展示page1的頁面;

用重定向和單獨配置路由的區別:

重定向實際上是當匹配到路徑符合條件的時候去執行對應的路由,當然這個時候的url上面的地址顯示的是對應的路由,頁面也是對應的路由頁面;

重新配置路由是當匹配到路徑符合條件的時候,router-view頁面展示部分負責拿符合條件路由的頁面來展示,實際上url是沒有發生變化的;

那么還有些復雜情況,是基本路由實現不了的;我們來接著往下看

動態路由匹配:

其實我們的生活中有很多這樣的例子,不知道大家留意沒有?比如一個網站或者后臺管理系統中,在我們登錄之后,是不是通常會有一個歡迎回來,XXX之類的提示語,這個我們就可以通過動態路由來實現這個效果;

首先在src目錄下新建一個user.vue文件:

<template> <div><h1>user</h1> //這里可以通過$route.params.name來獲取路由的參數<p>歡迎回來,{{$route.params.name}}</p> </div></template><script> export default {data () { return {msg: '我是page1組件' }} }</script>

然后我們修改App.vue文件的代碼:

<template> <div id='app'> <img src='http://www.b3g6.com/bcjs/assets/logo.png'> <div> <router-link to='/page1'>Page1</router-link> <router-link to='/page2'>Page2</router-link> </div>//添加兩個router-link標簽 <div> <router-link to='/user/xianyu'>動態路由咸魚</router-link> <router-link to='/user/mengxiang'>動態路由夢想</router-link> </div> <router-view></router-view> </div></template><script>export default { name: ’App’}</script><style>#app { font-family: ’Avenir’, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px;}</style>

修改我們的router.js

import Vue from ’vue’;import VueRouter from ’vue-router’;Vue.use(VueRouter)import page1 from ’./page1.vue’;import page2 from ’./page2.vue’;import user from ’./user.vue’const routes=[ {path:’/page1’,component:page1}, {path:'/page2',component:page2}, // {path:’’,redirect:'page1'} {path:'',component:page1}, //使用冒號標記,當匹配到的時候,參數值會被設置到this.$route.params中 {path:'/user/:name',component:user} ]const router=new VueRouter({ routes});export default router

配置好了,不出意外是能正常運行的,我們來看一下效果:

Vue路由vue-router詳細講解指南

動態路由匹配給我們提供了方便,使得我們通過配置一個路由來實現頁面局部修改的效果,給用戶造成一種多個頁面的感覺,是不是很酷?。。?/p>

酷的同時也會給我們帶來一些問題,因為使用路由參數時,從/user/xianyu導航到/user/mengxiang,原來的組件實例會被復用,兩個路由都渲染同個組件,比起銷毀再創建,顯示復用顯得效率更高,帶來的的只管問題就是生命周期鉤子函數不會再被調用,也就是不會再被觸發;但是辦法總比問題多,我們可以通過監聽$route對象來實現;

修改user.vue的代碼

<template> <div><h1>user</h1><p>歡迎回來,{{msg}}</p> </div></template><script> export default {data () { return {// msg: '我是page1組件'msg:'' }},watch:{//to表示即將要進入的那個組件,from表示從哪個組件過來的 $route(to,from){this.msg=to.params.name; console.log(111); }} }</script>

效果圖如下:

Vue路由vue-router詳細講解指南

我們可以很明顯的看到我們監聽的$route對象被觸發了,控制臺也輸出了;

下面我們來一起看一下嵌套路由:

嵌套路由:

很多時候我們的頁面結構決定了我們可能需要嵌套路由,比如當我們進入主頁之后有分類,然后當選擇其中一個分類之后進入對應的詳情,這個時候我們就可以用到嵌套路由;官方文檔中給我們提供了一個children屬性,這個屬性是一個數組類型,里面實際放著一組路由;這個時候父子關系結構就出來了,所以children屬性里面的是路由相對來說是children屬性外部路由的子路由;

好記性不如爛代碼,讓我們通過代碼來看一看:

首先在我們的src目錄下新建兩個vue文件,分別是phone.vue和computer.vue

phone.vue

<template> <div><p>{{msg}}</p> </div></template><script> export default {data () { return {msg: '嵌套手機組件' }} }</script>

computer.vue

<template> <div><p>{{msg}}</p> </div></template><script> export default {data () { return {msg: '嵌套電腦組件' }} }</script>

然后我們再修改我們的App.vue文件:

<template> <div id='app'> <img src='http://www.b3g6.com/bcjs/assets/logo.png'> <div> <router-link to='/page1'>Page1</router-link> </div> <router-view></router-view> </div></template><script>export default { name: ’App’}</script><style>#app { font-family: ’Avenir’, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px;}</style>

通過上面的App.vue文件我們可以看到,我們此時頁面只有一個page1的標簽了;

我們再來修改router.js

import Vue from ’vue’;import VueRouter from ’vue-router’;Vue.use(VueRouter)import page1 from ’./page1.vue’;import page2 from ’./page2.vue’;import user from ’./user.vue’;import phone from ’./phone.vue’;import computer from ’./computer.vue’const routes=[ {path:’/page1’,component:page1,children: [ {path: 'phone',component: phone }, {path: 'computer',component: computer },] }, // {path:'/page2',component:page2}, // // {path:’’,redirect:'page1'} // {path:'',component:page1}, // {path:'/user/:name',component:user} ]const router=new VueRouter({ routes});export default router

為了大家看的直觀點,其他路由全部注釋了,頁面只剩下/page1這一個路由了;

Vue路由vue-router詳細講解指南

上面說到了,children屬性其實就是一個子路由集合,數組結構里面放著子路由;

效果圖如下:

Vue路由vue-router詳細講解指南

路由導航兩種方式:

標簽導航:標簽導航<router-link><router-link>是通過轉義為<a></a>標簽進行跳轉,其中router-link標簽中的to屬性會被轉義為a標簽中的href屬性;

//跳轉到名為user路由,并傳遞參數userId<router-link :to='{ name: ’user’, params: { userId: 123 }}'>User</router-link>

編程式導航:我們可以通過this.$router.push()這個方法來實現編程式導航,當然也可以實現參數傳遞,這種編程式導航一般是用于按鈕點擊之后跳轉

router.push({ name: ’user’, params: { userId: 123 }})

這兩者都會把路由導航到user/123路徑

命名路由:

有的時候,通過一個名稱來標識一個路由顯得更方便一些,所以官方為了方便我們偷懶,又給我們在路由中添加了一個name屬性,命名這個屬性之后我們訪問這個屬性就等于直接訪問到路由;

普通路由:

router.push({ path: ’/user/:userId’, params: { userId: 123 }})

命名路由:

router.push({ name: ’user’, params: { userId: 123 }})

其實兩者并沒有什么區別,只是提供了兩種方式來訪問路由,可以通過路徑來匹配也可以通過別名來匹配;

以上就是Vue路由vue-router詳細講解指南的詳細內容,更多關于Vue路由講解的資料請關注好吧啦網其它相關文章!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品一区在线| 精品日韩一区| 亚洲高清二区| 欧美一区二区三区高清视频| 免费欧美一区| 中文无码久久精品| 69堂精品视频在线播放| 免费在线日韩av| 国产一二在线播放| 国产在线日韩| 亚洲人www| 国产精品一级| 老鸭窝一区二区久久精品| 欧美国产美女| 中文一区二区| 国产探花一区| 日韩精品一区二区三区免费观看| 欧美/亚洲一区| 久久国产精品亚洲77777| 无码日韩精品一区二区免费| 国产毛片精品| 91精品国产91久久久久久黑人| 悠悠资源网久久精品| 视频一区日韩| 久久三级中文| 国产一区观看| 国产日本精品| 久久99国产精品视频| 欧美日韩国产传媒| 日韩国产一二三区| 首页国产精品| 免费日韩精品中文字幕视频在线| 日本va欧美va精品发布| 日韩在线不卡| 亚洲3区在线| 日本免费一区二区三区四区| 中文精品电影| 成人一区不卡| 午夜精品影视国产一区在线麻豆| 国产夫妻在线| 奇米色欧美一区二区三区| 欧美不卡高清一区二区三区| 亚洲欧美日本视频在线观看| 精品午夜av| 中文字幕一区二区av| 日韩欧美一区二区三区免费观看| 亚洲男人在线| 激情久久中文字幕| 久久av影视| 久久av一区二区三区| 国产一区2区| 亚洲欧美在线综合| 久久久夜夜夜| 麻豆精品久久久| 日韩在线播放一区二区| 欧美日韩国产观看视频| 18国产精品| 亚洲91精品| 精品国内亚洲2022精品成人| 一区二区高清| 欧美日韩高清| a国产在线视频| 国产日韩一区二区三区在线 | 亚洲成av人片一区二区密柚| 日韩国产91| 国产一区成人| 久久国产小视频| 欧美激情麻豆| 日本视频中文字幕一区二区三区| 午夜电影亚洲| 97精品国产福利一区二区三区| 欧美日韩一区二区三区不卡视频| 国产亚洲毛片| 免费黄色成人| 欧美日韩国产在线观看网站| 国产aa精品| 精品一区二区三区四区五区| 欧美另类中文字幕| 亚洲欧洲美洲国产香蕉| 石原莉奈在线亚洲二区| 国产尤物精品| 女人天堂亚洲aⅴ在线观看| 成人羞羞在线观看网站| 国产传媒在线观看| a天堂资源在线| 国产一区二区三区四区| 欧美国产日本| 久久精品一区二区三区中文字幕| 欧美一区影院| 久久精品av麻豆的观看方式| 日韩精品久久理论片| 蜜臀av一区二区在线免费观看| 香蕉久久精品| 国产字幕视频一区二区| 91精品国产自产在线观看永久∴| 精品色999| 麻豆久久一区二区| 国产精品欧美在线观看| 国产精品成人**免费视频| 国产欧美一区二区精品久久久 | 色乱码一区二区三区网站| 久久精品国产成人一区二区三区 | 欧美在线看片| 国产麻豆一区二区三区精品视频| 欧美久久一区二区三区| 国产伦精品一区二区三区千人斩 | 国内亚洲精品| 久久国产成人| 日韩福利视频导航| 国产精品天天看天天狠| 欧美激情99| 岛国av免费在线观看| 婷婷综合六月| 欧美日韩精品一区二区视频| 亚洲激情婷婷| 亚洲精品乱码久久久久久蜜桃麻豆| 综合色一区二区| 国产另类在线| 激情久久一区二区| 久久久久国产精品一区三寸| 日韩电影免费在线观看| 99久久久久| 国产精品美女久久久| 亚洲精品综合| 国产精品115| 九色porny丨国产首页在线| 一区在线视频观看| 日韩国产在线一| 福利精品在线| 久久亚洲专区| 日韩精品视频中文字幕| 精品一区二区三区在线观看视频 | 99久久婷婷| 亚洲丝袜美腿一区| 欧美激情在线精品一区二区三区| 成人小电影网站| 久久国产精品久久久久久电车| 欧美日韩a区| 亚洲深夜视频| 亚洲日本久久| 福利一区视频| 亚洲精品日本| 久久久久国产精品一区二区| 天堂精品久久久久| 中文字幕高清在线播放| 亚洲专区视频| 在线手机中文字幕| 亚洲精品日本| 色老板在线视频一区二区| 日韩在线观看一区二区三区| 伊人久久视频| 日韩三级精品| 久久三级福利| 国产日韩中文在线中文字幕| 99精品小视频| 国产精品免费不| 激情久久五月| 麻豆视频一区二区| 综合激情网站| 日韩中文影院| 欧美亚洲三级| 欧美 日韩 国产精品免费观看| 国产日韩亚洲| 性一交一乱一区二区洋洋av| 国产一区二区三区久久久久久久久| 鲁大师成人一区二区三区| 91欧美日韩| 国产乱人伦精品一区| 免费成人性网站| 日韩视频网站在线观看| 国产日韩中文在线中文字幕| 免费久久99精品国产自在现线| 久久男人天堂| 国产精品免费不| 亚洲精品九九| 中文在线一区| 日韩欧美自拍| 美女免费视频一区| 日本色综合中文字幕| 先锋影音久久久| 香蕉久久99| 日韩久久精品网| 精品日本视频| 奇米色欧美一区二区三区| 免费日韩视频| 欧美日韩四区| 亚洲香蕉网站| 久久久精品五月天| av资源中文在线| 精品久久久亚洲| 国产精品啊v在线| 男女男精品网站| 一区二区亚洲精品| 欧美成人基地| 日韩伦理在线一区| www.九色在线| 日韩一区二区在线免费| 亚洲女同av| 99精品视频在线| 不卡在线一区二区|