一、路由
單頁應用程式: SPA - Single Page Application
VueRouter 的 介紹
作用:修改位址列路徑時,切換顯示匹配的元件說明:Vue 官方的一個路由外掛,是一個第三方包
官網:https://v3.router.vuejs.org/zh/
vue2 對應 router3
vue3 對應 router4
VueRouter 的 使用
1、下載
1 npm i vue-router@3.6.5
2、專案中新增views目錄,存放各個檢視頁面
views/Find.vue
1 <template> 2 <div> 3 <p>我的音樂</p> 4 <p>我的音樂</p> 5 <p>我的音樂</p> 6 <p>我的音樂</p> 7 </div> 8 </template> 9 10 <script> 11 export default { 12 name: 'MyMusic' 13 } 14 </script> 15 <style> 16 </style>
views/Friend.vue
1 <template> 2 <div> 3 <p>我的朋友</p> 4 <p>我的朋友</p> 5 <p>我的朋友</p> 6 <p>我的朋友</p> 7 </div> 8 </template> 9 10 <script> 11 export default { 12 name: 'MyFriend' 13 } 14 </script> 15 <style> 16 </style>
views/My.vue
1 <template> 2 <div> 3 <p>我的音樂</p> 4 <p>我的音樂</p> 5 <p>我的音樂</p> 6 <p>我的音樂</p> 7 </div> 8 </template> 9 10 <script> 11 export default { 12 name: 'MyMusic' 13 } 14 </script> 15 <style> 16 </style>
3、根元件App.vue中新增路由出口,也就是用來路由到不同檢視的位置
1 <template> 2 <div> 3 <div class="footer_wrap"> 4 <a href="#/find">發現音樂</a> 5 <a href="#/my">我的音樂</a> 6 <a href="#/friend">朋友</a> 7 </div> 8 <div class="top"> 9 <!-- 路由出口 → 匹配的元件所展示的位置 --> 10 <router-view></router-view> 11 </div> 12 </div> 13 </template> 14 15 <script> 16 export default {}; 17 </script> 18 19 <style> 20 body { 21 margin: 0; 22 padding: 0; 23 } 24 .footer_wrap { 25 position: relative; 26 left: 0; 27 top: 0; 28 display: flex; 29 width: 100%; 30 text-align: center; 31 background-color: #333; 32 color: #ccc; 33 } 34 .footer_wrap a { 35 flex: 1; 36 text-decoration: none; 37 padding: 20px 0; 38 line-height: 20px; 39 background-color: #333; 40 color: #ccc; 41 border: 1px solid black; 42 } 43 .footer_wrap a:hover { 44 background-color: #555; 45 } 46 </style>
4、main.js中定義路由,並且註冊到vue例項中,後續寫專案會將路由單獨寫到router目錄下index.js中,透過export匯出定義的路由元件,然後在main.js中匯入定義的路由進行註冊
1 import Vue from 'vue' 2 import App from './App.vue' 3 4 // 路由的使用步驟 5 + 2 5 // 5個基礎步驟 6 // 1. 下載 v3.6.5 7 // 2. 引入 8 // 3. 安裝註冊 Vue.use(Vue外掛) 9 // 4. 建立路由物件 10 // 5. 注入到new Vue中,建立關聯 11 12 // 2個核心步驟 13 // 1. 建元件(views目錄),配規則 14 // 2. 準備導航連結,配置路由出口(匹配的元件展示的位置) 15 import Find from './views/Find' 16 import My from './views/My' 17 import Friend from './views/Friend' 18 import VueRouter from 'vue-router' 19 Vue.use(VueRouter) // VueRouter外掛初始化 20 21 const router = new VueRouter({ 22 // routes 路由規則們 23 // route 一條路由規則 { path: 路徑, component: 元件 } 24 routes: [ 25 { path: '/find', component: Find }, 26 { path: '/my', component: My }, 27 { path: '/friend', component: Friend }, 28 ] 29 }) 30 31 Vue.config.productionTip = false 32 33 new Vue({ 34 render: h => h(App), 35 router 36 }).$mount('#app')
元件存放目錄問題
路由的封裝抽離
1、目錄結構
2、路由目錄
router/index.js
1 import Find from '@/views/Find' 2 import My from '@/views/My' 3 import Friend from '@/views/Friend' 4 5 import Vue from 'vue' 6 import VueRouter from 'vue-router' 7 Vue.use(VueRouter) // VueRouter外掛初始化 8 9 // 建立了一個路由物件 10 const router = new VueRouter({ 11 // routes 路由規則們 12 // route 一條路由規則 { path: 路徑, component: 元件 } 13 routes: [ 14 { path: '/find', component: Find }, 15 { path: '/my', component: My }, 16 { path: '/friend', component: Friend }, 17 ] 18 }) 19 20 export default router
3、檢視目錄
views/Find.vue
1 <template> 2 <div> 3 <p>發現音樂</p> 4 <p>發現音樂</p> 5 <p>發現音樂</p> 6 <p>發現音樂</p> 7 </div> 8 </template> 9 10 <script> 11 export default { 12 name: 'FindMusic' 13 } 14 </script> 15 <style> 16 </style>
views/Friend.vue
1 <template> 2 <div> 3 <p>我的朋友</p> 4 <p>我的朋友</p> 5 <p>我的朋友</p> 6 <p>我的朋友</p> 7 </div> 8 </template> 9 10 <script> 11 export default { 12 name: 'MyFriend' 13 } 14 </script> 15 <style> 16 </style>
views/My.vue
1 <template> 2 <div> 3 <p>我的音樂</p> 4 <p>我的音樂</p> 5 <p>我的音樂</p> 6 <p>我的音樂</p> 7 </div> 8 </template> 9 10 <script> 11 export default { 12 name: 'MyMusic' 13 } 14 </script> 15 <style> 16 </style>
4、根元件App.vue
1 <template> 2 <div> 3 <div class="footer_wrap"> 5 <a href="#/find">發現音樂</a> 6 <a href="#/my">我的音樂</a> 7 <a href="#/friend">朋友</a> 8 </div> 9 <div class="top"> 10 <!-- 2、路由出口 → 匹配的元件所展示的位置 --> 11 <router-view></router-view> 12 </div> 13 </div> 14 </template> 15 16 <script> 17 export default {}; 18 </script> 19 20 <style> 21 body { 22 margin: 0; 23 padding: 0; 24 } 25 .footer_wrap { 26 position: relative; 27 left: 0; 28 top: 0; 29 display: flex; 30 width: 100%; 31 text-align: center; 32 background-color: #333; 33 color: #ccc; 34 } 35 .footer_wrap a { 36 flex: 1; 37 text-decoration: none; 38 padding: 20px 0; 39 line-height: 20px; 40 background-color: #333; 41 color: #ccc; 42 border: 1px solid black; 43 } 44 .footer_wrap a:hover { 45 background-color: #555; 46 } 47 </style>
5、main.js
1 import Vue from 'vue' 2 import App from './App.vue' 3 import router from './router/index' 4 5 Vue.config.productionTip = false 6 7 new Vue({ 8 render: h => h(App), 9 router 10 }).$mount('#app')