1. 程式人生 > >vue.js路由vue-router(一)——簡單路由基礎

vue.js路由vue-router(一)——簡單路由基礎

styles mounted num 前言 vue.js ren main.c -s col

前言

vue.js除了擁有組件開發體系之外,還有自己的路由vue-router。在沒有使用路由之前,我們頁面的跳轉要麽是後臺進行管控,要麽是用a標簽寫鏈接。使用vue-router後,我們可以自己定義組件路由之間的跳轉,還可以設置稍復雜的嵌套路由,創建真正的spa(單頁面應用)。我之前用vue-cli腳手架寫了一個簡單的人員管理實例,現在我們不用腳手架,就用原生的vue來寫,本文也主要是通過實例來講解vue.js+vue-router相關知識。

簡單路由跳轉實例

1.起步

下載vue-router.js,新建項目文件夾命名為router,將下載的vue-router.js放在router/js/路徑下。新建index.html作為主頁,引入樣式文件,引入兩個關鍵的js,vue和vue-router,再在body標簽底部引入一個main.js用來寫vue實例及配置路由,註意引用順序。

 1 <!DOCTYPE html>
 2  
 3 <html lang="en">
 4  
 5 <head>
 6  
 7 <meta charset="UTF-8">
 8  
 9 <title>首頁</title>
10  
11 <link rel="stylesheet" href="css/main.css">
12  
13 <script src="js/vue.js"></script>
14  
15 <script src="js/vue-router.js"></script>
16
17 </head> 18 19 <body> 20 21 <div id="app"></div> 22 23 <template></template> //組件區域 24 25 <script src="js/main.js"></script> 26 27 </body> 28 29 </html>

2.定義路由視圖

調用foot-nav組件,將底部導航組件引入在這裏,是因為兩個路由頁面都要用到它

1 <div id="app">
2
3 <router-view></router-view> 4 5 <foot-nav></foot-nav> 6 7 </div>

知識點::<router-view>

<router-view>標簽相當於一個插槽,用於將匹配到的組件渲染出來,一個個路由定義的組件相當於卡,跳轉某個路由時,該路由下的頁面就插在這個插槽中渲染顯示。
一個組件可以有多個<router-view>視圖,並用name值去區分它們,這種多用在網頁布局方面,如上左主結構,這個時候就可以定義三個<router-view>
示例

 1 <div id="app">
 2  
 3 <router-view name="top"></router-view>
 4  
 5 <router-view name="left"></router-view>
 6  
 7 <router-view name="main"></router-view>
 8  
 9 </div>
10  
11  
12  
13 <script>
14  
15 var topCom = Vue.extend({
16  
17 template: ‘<div>頂部</div>‘
18  
19 })
20  
21  
22  
23 var leftCom = Vue.extend({
24  
25 template: ‘<div>側邊欄</div>‘
26  
27 })
28  
29  
30  
31 var mainCom = Vue.extend({
32  
33 template: ‘<div>主頁</div>‘
34  
35 })
36  
37  
38  
39 var router = new VueRouter({
40  
41 routes:[
42  
43 {
44  
45 path: ‘/‘,
46  
47 name: ‘home‘,
48  
49 components:{
50  
51 top: topCom,
52  
53 left: leftCom,
54  
55 main: mainCom
56  
57 }
58  
59 }
60  
61 ]
62  
63 })
64  
65  
66  
67 var app = new Vue({
68  
69 el: ‘#app‘,
70  
71 router
72  
73 })
74  
75 </script>

再為各個板塊設置一下樣式,打開瀏覽器查看效果

技術分享圖片

3.子組件(底部導航)

3.1 創建子組件

人員管理系統分為兩個模塊,一個首頁,一個管理頁,兩個頁面都需引入一個公共組件:底部導航。在首頁index.html中加入以下模板

 1 <template id="footer">
 2  
 3 <div class="footer fixed">
 4  
 5 <ul>
 6  
 7 <li><router-link to="/">首頁</router-link></li>
 8  
 9 <li><router-link :to="{name:‘manage‘,params:{id:1}}">人員管理</router-link></li>
10  
11 </ul>
12  
13 </div>
14  
15 </template>

知識點::<router-link>

<router-link>標簽主要實現跳轉鏈接功能,屬性to=‘/‘即是跳轉到path為‘/‘的路徑(我們等會得配置路徑為‘/‘和‘/manage‘的路由)
router-link除了可以跳轉鏈接之外,還可以傳參,可以傳多個參數,一般格式為

<router-link to="路由路徑"></router-link>
<router-link :to="{ path:路由路徑}"></router-link>
<router-link :to="{name:‘路由命名‘,params:{參數名:參數值,參數名:參數值}}"></router-link>

知識點:this.$router.push

如果不想用<router-link>標簽,也可以給需要跳轉的地方添加一個點擊事件,在事件裏寫this.$router.push方法

this.$router.push(‘路由路徑‘)
this.$router.push({name:‘路由命名‘,params:{參數名:參數值,參數名:參數值}})

3.2 註冊子組件

在main.js中全局註冊子組件並且定義vue實例

 1 Vue.component(‘foot-nav‘,{
 2  
 3 template: ‘#footer‘
 4  
 5 })
 6  
 7  
 8  
 9 var app = new Vue({
10  
11 el: ‘#app‘
12  
13 })

4.首頁及管理頁組件

4.1 創建首頁及管理頁

 1 <template id="index">
 2  
 3 <div>
 4  
 5 首頁
 6  
 7 </div>
 8  
 9 </template>
10  
11 <template id="manage">
12  
13 <div>
14  
15 人員管理
16  
17 <p>id:{{id}}</p>
18  
19 </div>
20  
21 </template>

4.2 註冊主頁及管理頁

 1 var Home = Vue.extend({
 2  
 3 template: ‘#index‘
 4  
 5 })
 6  
 7  
 8  
 9 var Manage = Vue.extend({
10  
11 template: ‘#manage‘,
12  
13 data(){
14  
15 return{
16  
17 id: ‘‘
18  
19 }
20  
21 },
22  
23 mounted:function(){
24  
25 this.id = this.$route.params.id
26  
27 }
28  
29 })

知識點:this.$route.params

this.$route指向vue實例的路由對象,params是路由傳過來的參數集合

5.定義路由

定義路由router,並引進vue實例中

 1 var router = new VueRouter({
 2  
 3 routes:[
 4  
 5 {
 6  
 7 path:‘/‘,
 8  
 9 name: ‘home‘,
10  
11 component:Home
12  
13 },
14  
15 {
16  
17 path:‘/manage/:id‘,
18  
19 name: ‘manage‘,
20  
21 component:Manage
22  
23 }
24  
25 ]
26  
27 })
28  
29  
30  
31 var app = new Vue({
32  
33 el: ‘#app‘,
34  
35 router
36  
37 })

知識點:path:‘/路徑/:參數名‘

一個路由要傳參時,需在path路徑後面添加一個‘/’並加上冒號和參數名

知識點:路由激活class

vue-router當路由處於激活狀態時,會有一個class類“router-link-active”,我們只需為這個類添加樣式就可以實現路由激活狀態下的樣式編寫
接下來去瀏覽器查看路由跳轉效果

技術分享圖片

6.嵌套路由

有時我們項目由多層嵌套組件組成,這個時候就需要用到嵌套路由
先看下圖例子,我們給manage路由再添加兩個子路由

技術分享圖片

6.1 在組件內部添加<router-view>

 1 <template id="manage">
 2  
 3 <div>
 4  
 5 人員管理
 6  
 7 <ul>
 8  
 9 <li><router-link to="/manage/list">人員列表</router-link></li>
10  
11 <li><router-link to="/manage/edit">編輯</router-link></li>
12  
13 </ul>
14  
15 <router-view></router-view>
16  
17 </div>
18  
19 </template>

6.2 定義子路由

 1 //構建組件
 2  
 3 var List = Vue.extend({
 4  
 5 template: ‘<div>人員列表</div>‘
 6  
 7 })
 8  
 9  
10  
11 var Edit = Vue.extend({
12  
13 template: ‘<div>編輯</div>‘
14  
15 })
16  
17  
18  
19  
20  
21  
22  
23 var router = new VueRouter({
24  
25 routes:[
26  
27 {
28  
29 path:‘/‘,
30  
31 name: ‘home‘,
32  
33 component:Home
34  
35 },
36  
37 {
38  
39 path:‘/manage‘,
40  
41 name: ‘manage‘,
42  
43 component:Manage,
44  
45 //子路由由children表示
46  
47 children:[
48  
49 {
50  
51 path:‘list‘,
52  
53 name: ‘list‘,
54  
55 component:List
56  
57 },
58  
59 {
60  
61 path:‘edit‘,
62  
63 name: ‘edit‘,
64  
65 component:Edit
66  
67 }
68  
69 ]
70  
71 }
72  
73 ]
74  
75 })

7.路由重定向

未設置路由重定向時,當我們隨意輸入一個路徑,會顯示一片空白或404。為了防止這種現象發生,我們一般在配置路由時再定義一個重定向路由

 1  
 2 var router = new VueRouter({
 3  
 4 routes:[
 5  
 6 {
 7  
 8 path:‘/‘,
 9  
10 name: ‘home‘,
11  
12 component:Home
13  
14 },
15  
16 {
17  
18 path:‘*‘,
19  
20 redirect: ‘/‘
21  
22 },
23  
24 ]
25  
26 })

打開瀏覽器,隨意輸入一個未定義的路由查看效果

技術分享圖片

vue.js路由vue-router(一)——簡單路由基礎