天天看點

Vue前端路由

1、Vue路由,路由的基本概念與原理。

答:1)、路由是一個比較廣義和抽象的概念,路由的本質就是對應關系。

2)、在開發中,路由分為,後端路由和前端路由。

3)、後端路由,根據不同的使用者URL請求,傳回不同的内容。後端路由的本質就是URL請求位址與伺服器資源之間的對應關系。後端路由根據不同的URL位址分發不同的資源。

4)、前端路由,根據不同的使用者事件,顯示不同的頁面内容。本質就是使用者事件與事件處理函數之間的對應關系。前端路由負責事件監聽,觸發事件後,通過事件函數渲染不同内容。

2、SPA(Single Page Application)。

答:1)、後端路由的渲染,就叫做後端渲染(存在性能問題)。

2)、Ajax前端渲染,前端渲染提供性能,但是不支援浏覽器的前進後退操作。

3)、SPA(Single Page Application)單頁面應用程式,整個網站隻有一個界面,内容的變化通過Ajax局部更新實作,同時支援浏覽器位址欄的前進和後退操作。

4)、SPA實作原理之一就是基于URL位址的hash,hash的變化會導緻浏覽器記錄通路曆史的變化,但是hash的變化不會觸發新的URL請求。

5)、在實作SPA過程中,最核心的技術點就是前端路由。

3、路由的基本概念與原理,實作簡易前端路由。

答:1)、基于URL中的hash實作,點選菜單的時候改變url的hash,根據hash的變化控制元件的切換。

2)、window.onhashchange,監聽window的onhashchange事件,根據擷取到的最新的hash值,切換要顯示的元件的名稱,通過location.hash擷取到最新的hash值。

1 <!DOCTYPE html>
 2 <html lang="en">
 3     <head>
 4         <meta charset="utf-8">
 5         <title></title>
 6     </head>
 7     <body>
 8         <!-- 被Vue執行個體控制的div區域 -->
 9         <div id="app">
10             <div v-text="name"></div>
11             <!-- 切換元件的超連結 -->
12             <a href="#/zhuye">首頁</a>
13             <a href="#/keji">科技</a>
14             <a href="#/caijing">财經</a>
15             <a href="#/yule">娛樂</a>
16 
17             <!-- 根據:is屬性指定的元件名稱,把對應的元件渲染到component标簽所在的位置 -->
18             <!-- 可以把component标簽當作是元件的占位符 -->
19             <component :is="comName"></component>
20         </div>
21 
22         <script type="text/javascript" src="js/vue.js"></script>
23         <script type="text/javascript">
24             /* 建立需要被切換的四個元件 */
25             var zhuye = {
26                 template: '<h1>首頁資訊</h1>',
27             };
28             var keji = {
29                 template: '<h1>科技資訊</h1>',
30             };
31             var caijing = {
32                 template: '<h1>财經資訊</h1>',
33             };
34             var yule = {
35                 template: '<h1>娛樂資訊</h1>',
36             };
37 
38 
39             /* 建立Vue的執行個體對象 */
40             var vm = new Vue({
41                 el: '#app',
42                 data: {
43                     name: 'hello world!!!',
44                     comName: 'zhuye',
45                 },
46                 components: {
47                     zhuye,
48                     keji,
49                     caijing,
50                     yule,
51                 },
52             });
53 
54             // window.onhashchange,監聽window的onhashchange事件,根據擷取到的最新的hash值,切換要顯示的元件的名稱。
55             window.onhashchange = function() {
56                 // 通過location.hash擷取到最新的hash值.
57                 console.log(location.hash, location.hash.slice(1));
58                 switch (location.hash.slice(1)) {
59                     case '/zhuye':
60                         vm.comName = 'zhuye';
61                         break;
62                     case '/keji':
63                         vm.comName = 'keji';
64                         break;
65                     case '/caijing':
66                         vm.comName = 'caijing';
67                         break;
68                     case '/yule':
69                         vm.comName = 'yule';
70                         break;
71                 }
72             }
73         </script>
74     </body>
75 </html>      

效果,如下所示:

Vue前端路由

4、Vue Router路由管理器(官網https://router.vuejs.org/zh/),Vue Router是Vue.js官方的路由管理器。

答:1)、Vue Router路由管理器是和Vue.js的核心深度內建,可以非常友善的用于SPA應用程式的開發。Vue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度內建,讓建構單頁面應用變得易如反掌。

2)、包含的功能有:

  a、嵌套的路由/視圖表

  b、子產品化的、基于元件的路由配置

  c、路由參數、查詢、通配符

  d、基于 Vue.js 過渡系統的視圖過渡效果

  e、細粒度的導航控制

  f、帶有自動激活的 CSS class 的連結

  g、HTML5 曆史模式或 hash 模式,在 IE9 中自動降級

  h、自定義的滾動條行為

5、Vue Router路由管理器的基本使用。

答:1)、引入相關的庫檔案。

2)、添加路由連結。

3)、添加路由填充位。

4)、定義路由元件。

5)、配置路由規則并建立路由執行個體。

6)、把路由挂載到Vue跟執行個體中。

1 <!DOCTYPE html>
 2 <html lang="en">
 3     <head>
 4         <meta charset="utf-8">
 5         <title></title>
 6 
 7         <!-- 第一步,導入vue檔案,為全局window對象挂載vue構造函數 -->
 8         <script src="https://unpkg.com/vue/dist/vue.js"></script>
 9         <!-- 導入vue-router檔案,為全局window對象挂載vueRouter構造函數 -->
10         <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
11     </head>
12     <body>
13         <div id="app">
14             <!-- 第二步,添加路由連結。 -->
15             <!-- router-link是Vue中提供的标簽,預設會被渲染為a标簽,    to屬性預設會被渲染為href屬性,to屬性的值預設會被渲染為#開頭的hash位址 -->
16             <router-link to="/user">User</router-link>
17             <router-link to="/register">Register</router-link>
18 
19             <!-- 第三步,添加路由填充為 -->
20             <!-- 路由填充為也叫做路由占位符,将來通過路由規則比對到的元件,将會被渲染到router-view所在的位置 -->
21             <router-view></router-view>
22         </div>
23 
24         <script type="text/javascript">
25             /* 第四步,定義路由元件 */
26             var User = {
27                 template: '<h1>User</h1>',
28             };
29             var Register = {
30                 template: '<h1>Register</h1>',
31             };
32 
33             /* 第五步,配置路由規則并建立路由執行個體。 */
34             // 建立路由執行個體對象
35             var router = new VueRouter({
36                 // routes是路由規則數組
37                 routes: [
38                     // 每個路由規則都是一個配置對象,其中至少包含path和component兩個屬性
39                     // path表示目前路由規則比對的hash位址
40                     // component表示目前路由規則對應要展示的元件
41                     {
42                         path: '/user',
43                         component: User, // 元件名稱,不是字元串
44                     },
45                     {
46                         path: '/register',
47                         component: Register, // 元件名稱,不是字元串
48                     }
49                 ]
50             });
51 
52             // 建立vm執行個體對象
53             var vm = new Vue({
54                 // 指定控制的區域
55                 el: '#app',
56                 data: {
57 
58                 },
59                 // 第六步,把路由挂載到Vue根執行個體中
60                 // 為了能夠讓路由規則生效,必須把路由對象挂載到Vue執行個體對象上
61                 router: router, // 挂載執行個體對象,es6中,如果屬性名稱和值一樣可以直接寫成一個屬性名稱即可.
62             });
63         </script>
64     </body>
65 </html>      

實作效果如下所示:

Vue前端路由

6、Vue Router路由管理器,路由重定向。

答:1)、路由重定向指的是,使用者在通路位址A的時候,強制使用者跳轉到位址C,進而展示特定的元件頁面。

2)、通過路由規則的redirect屬性,指定一個新的路由位址,可以很友善的設定路由的重定向。

1 <!DOCTYPE html>
 2 <html lang="en">
 3     <head>
 4         <meta charset="utf-8">
 5         <title></title>
 6 
 7         <!-- 第一步,導入vue檔案,為全局window對象挂載vue構造函數 -->
 8         <script src="https://unpkg.com/vue/dist/vue.js"></script>
 9         <!-- 導入vue-router檔案,為全局window對象挂載vueRouter構造函數 -->
10         <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
11     </head>
12     <body>
13         <div id="app">
14             <!-- 第二步,添加路由連結。 -->
15             <!-- router-link是Vue中提供的标簽,預設會被渲染為a标簽,    to屬性預設會被渲染為href屬性,to屬性的值預設會被渲染為#開頭的hash位址 -->
16             <router-link to="/user">User</router-link>
17             <router-link to="/register">Register</router-link>
18 
19             <!-- 第三步,添加路由填充為 -->
20             <!-- 路由填充為也叫做路由占位符,将來通過路由規則比對到的元件,将會被渲染到router-view所在的位置 -->
21             <router-view></router-view>
22         </div>
23 
24         <script type="text/javascript">
25             /* 第四步,定義路由元件 */
26             var User = {
27                 template: '<h1>User</h1>',
28             };
29             var Register = {
30                 template: '<h1>Register</h1>',
31             };
32 
33             /* 第五步,配置路由規則并建立路由執行個體。 */
34             // 建立路由執行個體對象
35             var router = new VueRouter({
36                 // routes是路由規則數組
37                 routes: [
38                     // 每個路由規則都是一個配置對象,其中至少包含path和component兩個屬性
39                     // path表示目前路由規則比對的hash位址
40                     // component表示目前路由規則對應要展示的元件
41                     {
42                         path: '/user',
43                         component: User, // 元件名稱,不是字元串
44                     },
45                     {
46                         path: '/register',
47                         component: Register, // 元件名稱,不是字元串
48                     },
49                     /* 其中,path表示需要被重定向的原位址,redirect表示将要被重定向到的新位址 */
50                     {
51                         path: '/',
52                         redirect: '/user'
53                     }
54                 ]
55             });
56 
57             // 建立vm執行個體對象
58             var vm = new Vue({
59                 // 指定控制的區域
60                 el: '#app',
61                 data: {
62 
63                 },
64                 // 第六步,把路由挂載到Vue根執行個體中
65                 // 為了能夠讓路由規則生效,必須把路由對象挂載到Vue執行個體對象上
66                 router: router, // 挂載執行個體對象,es6中,如果屬性名稱和值一樣可以直接寫成一個屬性名稱即可.
67             });
68         </script>
69     </body>
70 </html>      

7、Vue Router路由管理器,Vue Router嵌套路由的案例。

答:1)、首先建立父路由元件模闆,父級路由連結、父元件路由填充位。

2)、然後建立子集路由模闆,子級路由連結,子級路由填充位。

3)、然後配置嵌套路由配置,父級路由通過children屬性配置子級路由。

1 <!DOCTYPE html>
 2 <html lang="en">
 3     <head>
 4         <meta charset="utf-8">
 5         <title></title>
 6 
 7         <!-- 第一步,導入vue檔案,為全局window對象挂載vue構造函數 -->
 8         <script src="https://unpkg.com/vue/dist/vue.js"></script>
 9         <!-- 導入vue-router檔案,為全局window對象挂載vueRouter構造函數 -->
10         <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
11     </head>
12     <body>
13         <div id="app">
14             <!-- 第二步,添加路由連結。 -->
15             <!-- router-link是Vue中提供的标簽,預設會被渲染為a标簽,    to屬性預設會被渲染為href屬性,to屬性的值預設會被渲染為#開頭的hash位址 -->
16             <router-link to="/user">User</router-link>
17             <router-link to="/register">Register</router-link>
18 
19             <!-- 第三步,添加路由填充為 -->
20             <!-- 路由填充為也叫做路由占位符,将來通過路由規則比對到的元件,将會被渲染到router-view所在的位置 -->
21             <router-view></router-view>
22         </div>
23 
24         <script type="text/javascript">
25             /* 第四步,定義路由元件 */
26             var User = {
27                 template: '<h1>User</h1>',
28             };
29             var Register = {
30                 template: `
31                 <div>
32                 <h1>Register</h1>
33                 <hr/>
34                 <router-link to="/register/tab1">Tab1</router-link>
35                 <router-link to="/register/tab2">Tab2</router-link>
36                 
37                 <router-view></router-view>
38                 </div>
39                 `,
40                 //子級路由填充位置<router-view></router-view>
41             };
42 
43             var Tab1 = {
44                 template: '<h1>Tab1</h1>',
45             };
46             var Tab2 = {
47                 template: '<h1>Tab2</h1>',
48             };
49 
50             /* 第五步,配置路由規則并建立路由執行個體。 */
51             // 建立路由執行個體對象
52             var router = new VueRouter({
53                 // routes是路由規則數組
54                 routes: [
55                     // 每個路由規則都是一個配置對象,其中至少包含path和component兩個屬性
56                     // path表示目前路由規則比對的hash位址
57                     // component表示目前路由規則對應要展示的元件
58                     {
59                         path: '/user',
60                         component: User, // 元件名稱,不是字元串
61                     },
62                     {
63                         path: '/register',
64                         component: Register, // 元件名稱,不是字元串
65                         // 通過children屬性,為/register添加子路由規則
66                         children: [{
67                                 path: '/register/tab1',
68                                 component: Tab1
69                             },
70                             {
71                                 path: '/register/tab2',
72                                 component: Tab2
73                             },
74                         ]
75                     },
76                     /* 其中,path表示需要被重定向的原位址,redirect表示将要被重定向到的新位址 */
77                     {
78                         path: '/',
79                         redirect: '/user'
80                     }
81                 ]
82             });
83 
84             // 建立vm執行個體對象
85             var vm = new Vue({
86                 // 指定控制的區域
87                 el: '#app',
88                 data: {
89 
90                 },
91                 // 第六步,把路由挂載到Vue根執行個體中
92                 // 為了能夠讓路由規則生效,必須把路由對象挂載到Vue執行個體對象上
93                 router: router, // 挂載執行個體對象,es6中,如果屬性名稱和值一樣可以直接寫成一個屬性名稱即可.
94             });
95         </script>
96     </body>
97 </html>      

8、Vue Router路由管理器,Vue Router動态路由比對。

答:1)、動态路由比對,指的是如果某些路由規則一部分是完全一樣的,隻有另外一部分是動态變化的,這些動态變化的部分形成路由參數,這些路由參數就叫做動态路由比對。

2)、動态路徑參數,以冒号開頭,冒号後面的名字就是比對的名稱,通過動态路由參數的模式進行路由比對。路由元件中通過$route.params擷取路由參數。

1 <!DOCTYPE html>
  2 <html lang="en">
  3     <head>
  4         <meta charset="utf-8">
  5         <title></title>
  6 
  7         <!-- 第一步,導入vue檔案,為全局window對象挂載vue構造函數 -->
  8         <script src="https://unpkg.com/vue/dist/vue.js"></script>
  9         <!-- 導入vue-router檔案,為全局window對象挂載vueRouter構造函數 -->
 10         <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
 11     </head>
 12     <body>
 13         <div id="app">
 14             <!-- 第二步,添加路由連結。 -->
 15             <!-- router-link是Vue中提供的标簽,預設會被渲染為a标簽,    to屬性預設會被渲染為href屬性,to屬性的值預設會被渲染為#開頭的hash位址 -->
 16             <router-link to="/user/1">User1</router-link>
 17             <router-link to="/user/2">User2</router-link>
 18             <router-link to="/user/3">User3</router-link>
 19             <router-link to="/user/4">User4</router-link>
 20 
 21             <router-link to="/register">Register</router-link>
 22 
 23             <!-- 第三步,添加路由填充為 -->
 24             <!-- 路由填充為也叫做路由占位符,将來通過路由規則比對到的元件,将會被渲染到router-view所在的位置 -->
 25             <router-view></router-view>
 26         </div>
 27 
 28         <script type="text/javascript">
 29             /* 第四步,定義路由元件 */
 30             var User = {
 31                 template: '<h1>User元件,使用者id為: {{$route.params.id}}</h1>',
 32             };
 33             var Register = {
 34                 template: `
 35                 <div>
 36                 <h1>Register</h1>
 37                 <hr/>
 38                 <router-link to="/register/tab1">Tab1</router-link>
 39                 <router-link to="/register/tab2">Tab2</router-link>
 40                 
 41                 <router-view></router-view>
 42                 </div>
 43                 `,
 44                 //子級路由填充位置<router-view></router-view>
 45             };
 46 
 47             var Tab1 = {
 48                 template: '<h1>Tab1</h1>',
 49             };
 50             var Tab2 = {
 51                 template: '<h1>Tab2</h1>',
 52             };
 53 
 54             /* 第五步,配置路由規則并建立路由執行個體。 */
 55             // 建立路由執行個體對象
 56             var router = new VueRouter({
 57                 // routes是路由規則數組
 58                 routes: [
 59                     // 每個路由規則都是一個配置對象,其中至少包含path和component兩個屬性
 60                     // path表示目前路由規則比對的hash位址
 61                     // component表示目前路由規則對應要展示的元件
 62                     {
 63                         path: '/user/:id', // 動态路由比對
 64                         component: User, // 元件名稱,不是字元串
 65                     },
 66                     {
 67                         path: '/register',
 68                         component: Register, // 元件名稱,不是字元串
 69                         // 通過children屬性,為/register添加子路由規則
 70                         children: [{
 71                                 path: '/register/tab1',
 72                                 component: Tab1
 73                             },
 74                             {
 75                                 path: '/register/tab2',
 76                                 component: Tab2
 77                             },
 78                         ]
 79                     },
 80                     /* 其中,path表示需要被重定向的原位址,redirect表示将要被重定向到的新位址 */
 81                     {
 82                         path: '/',
 83                         redirect: '/user'
 84                     }
 85                 ]
 86             });
 87 
 88             // 建立vm執行個體對象
 89             var vm = new Vue({
 90                 // 指定控制的區域
 91                 el: '#app',
 92                 data: {
 93 
 94                 },
 95                 // 第六步,把路由挂載到Vue根執行個體中
 96                 // 為了能夠讓路由規則生效,必須把路由對象挂載到Vue執行個體對象上
 97                 router: router, // 挂載執行個體對象,es6中,如果屬性名稱和值一樣可以直接寫成一個屬性名稱即可.
 98             });
 99         </script>
100     </body>
101 </html>      

9、Vue Router路由管理器,路由元件傳遞參數。

答:1)、$route與對應路由形成高度耦合,不夠靈活,是以可以使用props将元件和路由解耦。

2)、props的值為布爾類型。如果props被設定為true。route.params将會被設定為元件屬性。

3)、使用props接收路由參數,直接使用參數名稱來使用路由參數。

1 <!DOCTYPE html>
  2 <html lang="en">
  3     <head>
  4         <meta charset="utf-8">
  5         <title></title>
  6 
  7         <!-- 第一步,導入vue檔案,為全局window對象挂載vue構造函數 -->
  8         <script src="https://unpkg.com/vue/dist/vue.js"></script>
  9         <!-- 導入vue-router檔案,為全局window對象挂載vueRouter構造函數 -->
 10         <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
 11     </head>
 12     <body>
 13         <div id="app">
 14             <!-- 第二步,添加路由連結。 -->
 15             <!-- router-link是Vue中提供的标簽,預設會被渲染為a标簽,    to屬性預設會被渲染為href屬性,to屬性的值預設會被渲染為#開頭的hash位址 -->
 16             <router-link to="/user/1">User1</router-link>
 17             <router-link to="/user/2">User2</router-link>
 18             <router-link to="/user/3">User3</router-link>
 19             <router-link to="/user/4">User4</router-link>
 20 
 21             <router-link to="/register">Register</router-link>
 22 
 23             <!-- 第三步,添加路由填充為 -->
 24             <!-- 路由填充為也叫做路由占位符,将來通過路由規則比對到的元件,将會被渲染到router-view所在的位置 -->
 25             <router-view></router-view>
 26         </div>
 27 
 28         <script type="text/javascript">
 29             /* 第四步,定義路由元件 */
 30             var User = {
 31                 props: ['id'], //使用props接收路由參數
 32                 template: '<h1>User元件,使用者id為: {{id}}</h1>', // 使用路由參數.
 33             };
 34             var Register = {
 35                 template: `
 36                 <div>
 37                 <h1>Register</h1>
 38                 <hr/>
 39                 <router-link to="/register/tab1">Tab1</router-link>
 40                 <router-link to="/register/tab2">Tab2</router-link>
 41                 
 42                 <router-view></router-view>
 43                 </div>
 44                 `,
 45                 //子級路由填充位置<router-view></router-view>
 46             };
 47 
 48             var Tab1 = {
 49                 template: '<h1>Tab1</h1>',
 50             };
 51             var Tab2 = {
 52                 template: '<h1>Tab2</h1>',
 53             };
 54 
 55             /* 第五步,配置路由規則并建立路由執行個體。 */
 56             // 建立路由執行個體對象
 57             var router = new VueRouter({
 58                 // routes是路由規則數組
 59                 routes: [
 60                     // 每個路由規則都是一個配置對象,其中至少包含path和component兩個屬性
 61                     // path表示目前路由規則比對的hash位址
 62                     // component表示目前路由規則對應要展示的元件
 63                     {
 64                         path: '/user/:id', // 動态路由比對
 65                         component: User, // 元件名稱,不是字元串
 66                         /* 如果props被設定為true。route.params将會被設定為元件屬性。 */
 67                         props: true,
 68                     },
 69                     {
 70                         path: '/register',
 71                         component: Register, // 元件名稱,不是字元串
 72                         // 通過children屬性,為/register添加子路由規則
 73                         children: [{
 74                                 path: '/register/tab1',
 75                                 component: Tab1
 76                             },
 77                             {
 78                                 path: '/register/tab2',
 79                                 component: Tab2
 80                             },
 81                         ]
 82                     },
 83                     /* 其中,path表示需要被重定向的原位址,redirect表示将要被重定向到的新位址 */
 84                     {
 85                         path: '/',
 86                         redirect: '/user'
 87                     }
 88                 ]
 89             });
 90 
 91             // 建立vm執行個體對象
 92             var vm = new Vue({
 93                 // 指定控制的區域
 94                 el: '#app',
 95                 data: {
 96 
 97                 },
 98                 // 第六步,把路由挂載到Vue根執行個體中
 99                 // 為了能夠讓路由規則生效,必須把路由對象挂載到Vue執行個體對象上
100                 router: router, // 挂載執行個體對象,es6中,如果屬性名稱和值一樣可以直接寫成一個屬性名稱即可.
101             });
102         </script>
103     </body>
104 </html>      

4)、如果props是一個對象,它會被按原樣設定為元件屬性,對象中有什麼資料,元件中就可以接收到什麼資料。

5)、props的值為函數類型,如果props是一個函數,則這個函數接收route對象為子級的形參。

1 <!DOCTYPE html>
  2 <html lang="en">
  3     <head>
  4         <meta charset="utf-8">
  5         <title></title>
  6 
  7         <!-- 第一步,導入vue檔案,為全局window對象挂載vue構造函數 -->
  8         <script src="https://unpkg.com/vue/dist/vue.js"></script>
  9         <!-- 導入vue-router檔案,為全局window對象挂載vueRouter構造函數 -->
 10         <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
 11     </head>
 12     <body>
 13         <div id="app">
 14             <!-- 第二步,添加路由連結。 -->
 15             <!-- router-link是Vue中提供的标簽,預設會被渲染為a标簽,    to屬性預設會被渲染為href屬性,to屬性的值預設會被渲染為#開頭的hash位址 -->
 16             <router-link to="/user/1">User1</router-link>
 17             <router-link to="/user/2">User2</router-link>
 18             <router-link to="/user/3">User3</router-link>
 19             <router-link to="/user/4">User4</router-link>
 20 
 21             <router-link to="/register">Register</router-link>
 22 
 23             <!-- 第三步,添加路由填充為 -->
 24             <!-- 路由填充為也叫做路由占位符,将來通過路由規則比對到的元件,将會被渲染到router-view所在的位置 -->
 25             <router-view></router-view>
 26         </div>
 27 
 28         <script type="text/javascript">
 29             /* 第四步,定義路由元件 */
 30             var User = {
 31                 props: ['id', 'uname', 'age'], //使用props接收路由參數
 32                 template: '<h1>User元件,使用者為: {{id}} {{uname}} {{age}}</h1>', // 使用路由參數.
 33             };
 34             var Register = {
 35                 template: `
 36                 <div>
 37                 <h1>Register</h1>
 38                 <hr/>
 39                 <router-link to="/register/tab1">Tab1</router-link>
 40                 <router-link to="/register/tab2">Tab2</router-link>
 41                 
 42                 <router-view></router-view>
 43                 </div>
 44                 `,
 45                 //子級路由填充位置<router-view></router-view>
 46             };
 47 
 48             var Tab1 = {
 49                 template: '<h1>Tab1</h1>',
 50             };
 51             var Tab2 = {
 52                 template: '<h1>Tab2</h1>',
 53             };
 54 
 55             /* 第五步,配置路由規則并建立路由執行個體。 */
 56             // 建立路由執行個體對象
 57             var router = new VueRouter({
 58                 // routes是路由規則數組
 59                 routes: [
 60                     // 每個路由規則都是一個配置對象,其中至少包含path和component兩個屬性
 61                     // path表示目前路由規則比對的hash位址
 62                     // component表示目前路由規則對應要展示的元件
 63                     {
 64                         path: '/user/:id', // 動态路由比對
 65                         component: User, // 元件名稱,不是字元串
 66                         /* 如果props是一個對象,它會被按原樣設定為元件屬性。 */
 67                         /* props: {
 68                             uname: '張飒飒',
 69                             age: 12
 70                         }, */
 71 
 72                         /* 如果props是一個函數, 則這個函數接收route對象為子級的形參 */
 73                         /* route對象就是路由中的動态參數對象,路徑中有幾個參數項,route裡面就有幾個參數值. */
 74                         props: route => ({ // 傳回一個props對象
 75                             uname: '張飒飒',
 76                             age: 20,
 77                             id: route.params.id,
 78                         })
 79                     },
 80                     {
 81                         path: '/register',
 82                         component: Register, // 元件名稱,不是字元串
 83                         // 通過children屬性,為/register添加子路由規則
 84                         children: [{
 85                                 path: '/register/tab1',
 86                                 component: Tab1
 87                             },
 88                             {
 89                                 path: '/register/tab2',
 90                                 component: Tab2
 91                             },
 92                         ]
 93                     },
 94                     /* 其中,path表示需要被重定向的原位址,redirect表示将要被重定向到的新位址 */
 95                     {
 96                         path: '/',
 97                         redirect: '/user'
 98                     }
 99                 ]
100             });
101 
102             // 建立vm執行個體對象
103             var vm = new Vue({
104                 // 指定控制的區域
105                 el: '#app',
106                 data: {
107 
108                 },
109                 // 第六步,把路由挂載到Vue根執行個體中
110                 // 為了能夠讓路由規則生效,必須把路由對象挂載到Vue執行個體對象上
111                 router: router, // 挂載執行個體對象,es6中,如果屬性名稱和值一樣可以直接寫成一個屬性名稱即可.
112             });
113         </script>
114     </body>
115 </html>      

10、Vue Router路由管理器,Vue Router命名路由。

答:1)、為了更加友善的表示路由的路徑,可以給路由規則起一個别名,即為命名路由。    

2)、通過命名路由可以實作頁面的跳轉。可以用在程式設計式導航。

1 <!DOCTYPE html>
  2 <html lang="en">
  3     <head>
  4         <meta charset="utf-8">
  5         <title></title>
  6 
  7         <!-- 第一步,導入vue檔案,為全局window對象挂載vue構造函數 -->
  8         <script src="https://unpkg.com/vue/dist/vue.js"></script>
  9         <!-- 導入vue-router檔案,為全局window對象挂載vueRouter構造函數 -->
 10         <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
 11     </head>
 12     <body>
 13         <div id="app">
 14             <!-- 第二步,添加路由連結。 -->
 15             <!-- router-link是Vue中提供的标簽,預設會被渲染為a标簽,    to屬性預設會被渲染為href屬性,to屬性的值預設會被渲染為#開頭的hash位址 -->
 16             <router-link to="/user/1">User1</router-link>
 17             <router-link to="/user/2">User2</router-link>
 18             <!-- 要連結到一個命名路由,可以給 router-link 的 to 屬性傳一個對象: -->
 19             <router-link :to="{name:'user',params:{id:123456}}">User3</router-link>
 20             <router-link to="/user/4">User4</router-link>
 21 
 22             <router-link to="/register">Register</router-link>
 23 
 24             <!-- 第三步,添加路由填充為 -->
 25             <!-- 路由填充為也叫做路由占位符,将來通過路由規則比對到的元件,将會被渲染到router-view所在的位置 -->
 26             <router-view></router-view>
 27         </div>
 28 
 29         <script type="text/javascript">
 30             /* 第四步,定義路由元件 */
 31             var User = {
 32                 props: ['id', 'uname', 'age'], //使用props接收路由參數
 33                 template: '<h1>User元件,使用者為: {{id}} {{uname}} {{age}}</h1>', // 使用路由參數.
 34             };
 35             var Register = {
 36                 template: `
 37                 <div>
 38                 <h1>Register</h1>
 39                 <hr/>
 40                 <router-link to="/register/tab1">Tab1</router-link>
 41                 <router-link to="/register/tab2">Tab2</router-link>
 42                 
 43                 <router-view></router-view>
 44                 </div>
 45                 `,
 46                 //子級路由填充位置<router-view></router-view>
 47             };
 48 
 49             var Tab1 = {
 50                 template: '<h1>Tab1</h1>',
 51             };
 52             var Tab2 = {
 53                 template: '<h1>Tab2</h1>',
 54             };
 55 
 56             /* 第五步,配置路由規則并建立路由執行個體。 */
 57             // 建立路由執行個體對象
 58             var router = new VueRouter({
 59                 // routes是路由規則數組
 60                 routes: [
 61                     // 每個路由規則都是一個配置對象,其中至少包含path和component兩個屬性
 62                     // path表示目前路由規則比對的hash位址
 63                     // component表示目前路由規則對應要展示的元件
 64                     {
 65                         path: '/user/:id', // 動态路由比對
 66                         component: User, // 元件名稱,不是字元串
 67                         /* 如果props是一個對象,它會被按原樣設定為元件屬性。 */
 68                         /* props: {
 69                             uname: '張飒飒',
 70                             age: 12
 71                         }, */
 72 
 73                         /* 如果props是一個函數, 則這個函數接收route對象為子級的形參 */
 74                         /* route對象就是路由中的動态參數對象,路徑中有幾個參數項,route裡面就有幾個參數值. */
 75                         props: route => ({ // 傳回一個props對象
 76                             uname: '張飒飒',
 77                             age: 20,
 78                             id: route.params.id,
 79                         }),
 80                         /* 命名路由 */
 81                         name: 'user', // 通過路由的name屬性可以實作導航和跳轉功能
 82                     },
 83                     {
 84                         path: '/register',
 85                         component: Register, // 元件名稱,不是字元串
 86                         // 通過children屬性,為/register添加子路由規則
 87                         children: [{
 88                                 path: '/register/tab1',
 89                                 component: Tab1
 90                             },
 91                             {
 92                                 path: '/register/tab2',
 93                                 component: Tab2
 94                             },
 95                         ]
 96                     },
 97                     /* 其中,path表示需要被重定向的原位址,redirect表示将要被重定向到的新位址 */
 98                     {
 99                         path: '/',
100                         redirect: '/user'
101                     }
102                 ]
103             });
104 
105             // 建立vm執行個體對象
106             var vm = new Vue({
107                 // 指定控制的區域
108                 el: '#app',
109                 data: {
110 
111                 },
112                 // 第六步,把路由挂載到Vue根執行個體中
113                 // 為了能夠讓路由規則生效,必須把路由對象挂載到Vue執行個體對象上
114                 router: router, // 挂載執行個體對象,es6中,如果屬性名稱和值一樣可以直接寫成一個屬性名稱即可.
115             });
116         </script>
117     </body>
118 </html>      
1 <!DOCTYPE html>
  2 <html lang="en">
  3     <head>
  4         <meta charset="utf-8">
  5         <title></title>
  6 
  7         <!-- 第一步,導入vue檔案,為全局window對象挂載vue構造函數 -->
  8         <script src="https://unpkg.com/vue/dist/vue.js"></script>
  9         <!-- 導入vue-router檔案,為全局window對象挂載vueRouter構造函數 -->
 10         <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
 11     </head>
 12     <body>
 13         <div id="app">
 14             <!-- 第二步,添加路由連結。 -->
 15             <!-- router-link是Vue中提供的标簽,預設會被渲染為a标簽,    to屬性預設會被渲染為href屬性,to屬性的值預設會被渲染為#開頭的hash位址 -->
 16             <router-link to="/user/1">User1</router-link>
 17             <router-link to="/user/2">User2</router-link>
 18             <!-- 要連結到一個命名路由,可以給 router-link 的 to 屬性傳一個對象: -->
 19             <router-link :to="{name:'user',params:{id:123456}}">User3</router-link>
 20             <router-link to="/user/4">User4</router-link>
 21 
 22             <router-link to="/register">Register</router-link>
 23 
 24             <!-- 第三步,添加路由填充為 -->
 25             <!-- 路由填充為也叫做路由占位符,将來通過路由規則比對到的元件,将會被渲染到router-view所在的位置 -->
 26             <router-view></router-view>
 27         </div>
 28 
 29         <script type="text/javascript">
 30             /* 第四步,定義路由元件 */
 31             var User = {
 32                 props: ['id', 'uname', 'age'], //使用props接收路由參數
 33                 // template: '<h1>User元件,使用者為: {{id}} {{uname}} {{age}}</h1>', // 使用路由參數.
 34                 /* 程式設計式導航的使用 */
 35                 template: `
 36                     <div>
 37                         <h1>User元件,使用者為: {{id}} {{uname}} {{age}}</h1>
 38                         <button @click="goRegister">跳轉到注冊頁面</button>
 39                     </div>
 40                 `,
 41                 methods: {
 42                     goRegister: function() {
 43                         // 用程式設計式的方式控制路由跳轉
 44                         this.$router.push('/register');
 45                     }
 46                 },
 47             };
 48             var Register = {
 49                 template: `
 50                 <div>
 51                 <h1>Register</h1>
 52                 <hr/>
 53                 <router-link to="/register/tab1">Tab1</router-link>
 54                 <router-link to="/register/tab2">Tab2</router-link>
 55                 
 56                 <router-view></router-view>
 57                 
 58                 <button @click="goBack">傳回到上一步</button>
 59                 </div>
 60                 `,
 61                 //子級路由填充位置<router-view></router-view>,
 62                 methods: {
 63                     goBack: function() {
 64                         // 用程式設計式的方式控制路由跳轉
 65                         this.$router.go('-1');
 66                     }
 67                 },
 68             };
 69 
 70             var Tab1 = {
 71                 template: '<h1>Tab1</h1>',
 72             };
 73             var Tab2 = {
 74                 template: '<h1>Tab2</h1>',
 75             };
 76 
 77             /* 第五步,配置路由規則并建立路由執行個體。 */
 78             // 建立路由執行個體對象
 79             var router = new VueRouter({
 80                 // routes是路由規則數組
 81                 routes: [
 82                     // 每個路由規則都是一個配置對象,其中至少包含path和component兩個屬性
 83                     // path表示目前路由規則比對的hash位址
 84                     // component表示目前路由規則對應要展示的元件
 85                     {
 86                         path: '/user/:id', // 動态路由比對
 87                         component: User, // 元件名稱,不是字元串
 88                         /* 如果props是一個對象,它會被按原樣設定為元件屬性。 */
 89                         /* props: {
 90                             uname: '張飒飒',
 91                             age: 12
 92                         }, */
 93 
 94                         /* 如果props是一個函數, 則這個函數接收route對象為子級的形參 */
 95                         /* route對象就是路由中的動态參數對象,路徑中有幾個參數項,route裡面就有幾個參數值. */
 96                         props: route => ({ // 傳回一個props對象
 97                             uname: '張飒飒',
 98                             age: 20,
 99                             id: route.params.id,
100                         }),
101                         /* 命名路由 */
102                         name: 'user', // 通過路由的name屬性可以實作導航和跳轉功能
103                     },
104                     {
105                         path: '/register',
106                         component: Register, // 元件名稱,不是字元串
107                         // 通過children屬性,為/register添加子路由規則
108                         children: [{
109                                 path: '/register/tab1',
110                                 component: Tab1
111                             },
112                             {
113                                 path: '/register/tab2',
114                                 component: Tab2
115                             },
116                         ]
117                     },
118                     /* 其中,path表示需要被重定向的原位址,redirect表示将要被重定向到的新位址 */
119                     {
120                         path: '/',
121                         redirect: '/user'
122                     }
123                 ]
124             });
125 
126             // 建立vm執行個體對象
127             var vm = new Vue({
128                 // 指定控制的區域
129                 el: '#app',
130                 data: {
131 
132                 },
133                 // 第六步,把路由挂載到Vue根執行個體中
134                 // 為了能夠讓路由規則生效,必須把路由對象挂載到Vue執行個體對象上
135                 router: router, // 挂載執行個體對象,es6中,如果屬性名稱和值一樣可以直接寫成一個屬性名稱即可.
136             });
137         </script>
138     </body>
139 </html>