VUE-Router基本配置
前端路由有什麼優點和缺點?
• 優點:使用者體驗好,不需要每次都從伺服器全部獲取,快速展現給使用者
• 缺點:不利於SEO;使用瀏覽器的前進,後退鍵的時候會重新發送請求,沒有合理地利用快取;單頁面無法記住之前滾 動的位置,無法在前進,後退的時候記住滾動的位置
這裡的路由並不是指我們平時所說的硬體路由器,這裡的路由就是SPA(單頁應用)的路徑管理器。再通俗的說,vue-router就是我們WebApp的連結路徑管理系統
Vue-Router入門
安裝vue-router
npm install vue-router --save-dev
這裡建議使用vue-cli腳手架 生成vue-router
vue init webpack vue-cli
在vue-router選項選擇yes 就可以了
###在src目錄下的router index.js檔案已經配置好了
引入元件HelloWorld的時候 這裡有個"@" 其實是webpack配置的路徑設定預設為src
此時我們進入vue-cli 執行
npm run dev
預設開啟http://localhost:8080
就能看到HelloWorld中的內容了
簡單談一下router-view router-link
router-view用來顯示對應元件的內容,通過router-link傳遞資訊匹配相應的元件渲染router-view
有點類似於tab切換,可以理解為DOM元素的顯示隱藏
為什麼不用a標籤切換
因為我們用Vue作的都是單頁應用,就相當於只有一個主的index.html頁面,所以標籤是不起作用的,必須使用vue-router來進行管理。
路由中三個基本的概念 route, routes, router
1 . route,它是一條路由,Home按鈕 => home內容, 這是一條route, about按鈕 => about 內容, 這是另一條路由,儲存著當前路由頁面的資訊,實際開發多用$route用來獲取資訊
2 . routes 是一組路由,把上面的每一條路由組合起來,形成一個數組。實際開發用處不多
3 . router 是一個機制,相當於一個管理者,它來管理路由。居多是對路由路徑的操作
這邊簡單介紹一下meta元資訊
meta也是存在於物件中的一個屬性,此屬性作用不是很大,一般用來判斷當前是否切換到了路由,切換成功顯示元件內容的作用,亦或是在$route.meta讀取內容,可以設定值為陣列用來呼叫
接下來開始例項
在components中新建元件並存入路由中
這是HelloWorld中的內容
然後我們在url中修改一下路徑
回車之後顯示的內容如下
一旦我們在路由中設定好物件屬性,就可以在url中改變path顯示內容了
router-link
如何通過router-link繫結路由
router-link一定是在有router-view標籤的元件當中,通過to繫結路由中的path路徑,用來切換router-view中的內容,同時改變對應的url路徑
配置子路由(嵌入路由)
子路由的情況一般用在一個頁面有他的基礎模版,然後它下面的頁面都隸屬於這個模版,只是部分改變樣式
新建三個元件
編輯路由
此時已經可以使用url進入元件,使用router-link編輯一下router-view
router-view 一定是存在父路由中的 也就是Test中
vue-router傳遞引數(一)
利用router-link 中的to進行傳參 格式如下 注意to前面加冒號 資料繫結
<router-link :to="{name:name,params:{key:value}}">XXXXX</router-link>
name代表路由中設定的name params代表傳遞的物件
<router-link :to="{name:'Test1',params:{user:'username'}}">test1</router-link>
<router-link to="/test/test2">test2</router-link>
在子路由中,父路由的name是無效的 只有children中的name才有效
{
path:'/test',
name:'Test',
component:Test,
children:[
{path:'/',component:Test}, //此處path路徑 / 表示父路由下的根目錄 也就是/test 顯示Test
{path:'test1',name:'Test1',component:Test1}, //子路由不需要加/
{path:'test2',component:Test2}
]
}
使用$route屬性進行接參
通過設定的引數即可顯示
vue-router傳遞引數(二)
利用url傳遞引數,也就是直接在路由path中設定引數
簡單說明一下
{
path:'/params/:newsId/:newsTitle', //冒號後面的都是引數
component:Params
}
還是利用$route接收引數
<p>{{ $route.params.newsId}}</p>
<p>{{ $route.params.newsTitle}}</p>
但是此時我們的router-link寫法要稍微改變一下
<router-link to="/params/520/vue">params</router-link>
此時傳遞內容稍微有點固化,可根據實際情況,個人喜好進行設定
這裡有個小技巧,設定一下傳遞的資料型別,比如我們想要數字禁止傳遞物件
path:'/params/:newsId(\\d+)/:newsTitle',
給引數後面設定一個正則即可,一般還是使用to傳參
單頁面多路由區域操作
更改了一下路由 當component屬性為多個時要加s
除了default引數是固定的其餘可以自定義
通過router-view進行編輯,routes中的根路由的父路由都是通過APP.VUE渲染的 注意一下 所以我們在APP.VUE中編輯 router-view
<template>
<div id="app">
<router-link to='/'>HelloWorld</router-link>
<router-link to='/test'>Test</router-link>
<router-view/>
<router-view name="lefts" style="float:left;width:50%;background-color:#ccc;height:300px;"></router-view>
<router-view name="right" style="float:right;width:50%;background-color:#c0c;height:300px;"></router-view>
</div>
</template>
效果就不演示了 可以複製程式碼測試一下
vue-router 的重定向
開發中有時候我們雖然設定的路徑不一致,但是我們希望跳轉到同一個頁面,或者說是開啟同一個元件。這時候我們就用到了路由的重新定向redirect引數。
export default new Router({
routes: [
{
path: '/',
name: 'HelloWorld',
component:HelloWorld
},{
path:'/goback',
redirect:'/'
}
]
})
在物件中設定redirect引數,配置為路徑,當url中輸入/goback路徑的時候 會自動轉入根路由
一般可以用來配置404呼叫 設定萬用字元* 路徑即可
{
path:'*',
redirect:'/404元件'
}
重定向的配置跟path是相同的 也就是說也可以配置url引數
{
path:'/goParams/:newsId/:newsTitle',
redirect:'/params/:newsId/:newsTitle'
}
alias別名的使用
export default new Router({
routes: [
{
path: '/',
name: 'HelloWorld',
component:HelloWorld
},{
path:'/test',
component:Test,
alias:'/tests'
}
]
})
其實就是雙向path,可以通過path路徑也可以通過alias路徑訪問路由,類似重定向
##redirect和alias的區別
redirect:仔細觀察URL,redirect是直接改變了url的值,把url變成了真實的path路徑。
alias:URL路徑沒有別改變,這種情況更友好,讓使用者知道自己訪問的路徑,只是改變了中的內容。
alias小坑
別名請不要用在path為’/’中,也就是根路由中,將不起作用
路由的過渡動畫
在開發中有一種需求叫高階、大氣、上檔次。可以在頁面切換時我們加入一些動畫效果,提升我們程式的動效設計。
格式如下,在router-view外套上transition標籤 name內容自定義
<transition name="fade">
<router-view ></router-view>
</transition>
css過渡類名: 元件過渡過程中,會有四個CSS類名進行切換,這四個類名與transition的name屬性有關,比如name=”fade”,會有如下四個CSS類名:
1、fade-enter:進入過渡的開始狀態,元素被插入時生效,只應用一幀後立刻刪除。
2、fade-enter-active:進入過渡的結束狀態,元素被插入時就生效,在過渡過程完成後移除。
3、fade-leave:離開過渡的開始狀態,元素被刪除時觸發,只應用一幀後立刻刪除。
4、fade-leave-active:離開過渡的結束狀態,元素被刪除時生效,離開過渡完成後被刪除。
以下css供測試 注意要有路由切換,做好路由設定先
.fade-enter {
opacity:0;
}
.fade-leave{
opacity:1;
}
.fade-enter-active{
transition:opacity .5s;
}
.fade-leave-active{
opacity:0;
transition:opacity .5s;
}
transition還有mode標籤
<transition name="fade" mode=" ">
<router-view ></router-view>
</transition>
過渡模式mode:
in-out:新元素先進入過渡,完成之後當前元素過渡離開。 (預設)
out-in:當前元素先進行過渡離開,離開完成後新元素過渡進入。
路由的mode設定
mode的兩個值
histroy:當你使用 history 模式時,URL 就像正常的 url
hash:預設’hash’值,但是hash看起來就像無意義的字元排列,不太好看也不符合我們一般的網址瀏覽習慣。
export default new Router({
mode:'history',
routes: [
{
path: '/',
name: 'HelloWorld',
component:HelloWorld
},{
path:'/test',
component:Test,
alias:'/tests'
}
]
})