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>

效果,如下所示:

 

 

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>

實現效果如下所示:

 

 

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>

 

11、Vue Router路由管理器,Vue Router編程式導航。

答:1)、頁面導航的兩種方式,第一種是聲明式導航,通過點擊鏈接實現導航的方式,叫做聲明式導航,例如普通網頁中的<a></a>鏈接或者vue中的<route-link></route-link>
2)、第二種方式就是編程時航道,通過調用js形式的api實現導航的方式,叫做編程式導航。例如普通網頁中的location.href。
3)、vue中的編程式導航,常用的編程式導航如this.$router.push('hash地址')、this.$route.go(n)實現歷史記錄中的前進和后退,1是前進,-1是后退;

  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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM