内容简介:Vue 雖然由 Component 所構成,為了模擬出不同頁面有不同網址,Vue 官方也提供了 Vue Router,這是前端自己的 Route,有別於後端的 Route。Vue 2.6.10Vue-router 3.0.3
Vue 雖然由 Component 所構成,為了模擬出不同頁面有不同網址,Vue 官方也提供了 Vue Router,這是前端自己的 Route,有別於後端的 Route。
Version
Vue 2.6.10
Vue-router 3.0.3
Vue CLI 3.8.4
Add Vue-Router
Vue CLI 已經將 Vue Router 整合進來,可以直接使用 Vue CLI 建立含有 Vue Router 的 project。
$ vue create vue-router-basic
使用 Vue CLI 的 vue create
建立 vue-router-basic
。
Vue Router 雖然為官方 package,但預設並沒有包含在 Vue 內,因此需要使用 Manually select features
另外安裝。
除了預設的 Babel
與 Linter / Formatter
外,使用 space bar 選擇 Router
。
History Mode
選擇 n
。
至於什麼是 History Mode
,會使用專文解釋
選擇 ESLint with error prevention only
。
選擇 Lint on save
。
選擇 In dedicated config files
,也就是 Babel、PostCSS、ESLint … 等 工具 都有自己的 config 檔,而不會全部集中在 package.json
。
Save this as a preset for future projects
選擇 n
,也就是預設不使用 Vue Router。
成功建立含有 Vue Router 的 project。
在 package.json
可以看到 "vue-router" : "^3.0.3"
,表示 vue-router
預設已經安裝成功
$ yarn serve
在專案目錄下輸入 yarn serve
啟動 Vue CLI 內建的 web serve。
Vue 內建 web server 預設啟動在 http://localhost:8080
-
Home
的 route 為/
- 與 Vue 預設專案不同,已經多了
Home
與About
- 點
About
,則進入了About
page -
About
的 route 為/about
Architecture
rounter.js
import Vue from 'vue'; import Router from 'vue-router'; import Home from './views/Home.vue'; Vue.use(Router); export default new Router({ routes: [ { path: '/', name: 'home', component: Home }, { path: '/about', name: 'about', // route level code-splitting // this generates a separate chunk (about.[hash].js) for this route // which is lazy-loaded when the route is visited. component: () => import(/* webpackChunkName: "about" */ './views/About.vue') } ] });
與一般 Vue 專案不同,在 src
目錄下多了 route.js
,為統一設定 route 之處。
第 2 行
import Router from 'vue-router';
import
進 vue-router
的 class,並自己取名為 Router
。
此為 ES6 的 default export,因此可自行命名
第 5 行
Vue.use(Router);
Vue 規定若 package 要供 Vue 使用,則可使用 Vue.use()
傳進 package 的 class、object 或 function。
第 7 行
export default new Router({
這相當於
let router = new Router(); export default router;
只是 Vue 將兩行寫成一行,將 Router
object 使用 defaul export。
第 8 行
routes: [
以 routes
為 property,將 route 以陣列設定。
第 9 行
{ path: '/', name: 'home', component: Home, },
- path : 設定 route path
- name : 設定 route 的名稱
- component : 設定 route 所使用的 component
由於 Vue 是基於 component 架構,換 route 只是換 component 而已
14 行
{ path: '/about', name: 'about', // route level code-splitting // this generates a separate chunk (about.[hash].js) for this route // which is lazy-loaded when the route is visited. component: () => import(/* webpackChunkName: "about" */ './views/About.vue'), },
若要使 component 有 lazy loading 效果,也就是不要將該 component 包在 chunk-vendors.[hash].js
內,而是另外獨立的 .js
,只有當 route 真的被執行時,才會下載 about.[hash].js
。
/* webpackChunkName: "about" */
並非註解,而是給 Webpack 看的,可以省略,會紫自動以 hash
值作為檔名,實務上建議與 route 名稱相同,可藉此觀察 Webpack 是否正確啟動 lazy loading
main.js
import Vue from 'vue'; import App from './App.vue'; import router from './router'; Vue.config.productionTip = false; new Vue({ router, render: h => h(App), }).$mount('#app');
第 3 行
import router from './router';
將自己 router.js
import 進來,不是 vue-router
。
第 7 行
new Vue({ router, render: h => h(App), }).$mount('#app');
將 router
傳進 Vue instance。
App.vue
<template> <div id="app"> <div id="nav"> <router-link to="/"> Home </router-link> | <router-link to="/about"> About </router-link> </div> <router-view> </router-view> </div> </template>
第 4 行
<router-link to="/">Home</router-link> | <router-link to="/about">About</router-link>
若要使用 Vue Router 所定義的 route,不能再使用 <a/>
,而要改用 Vue 所提供的 <router-link/>
component,並使用 to
directive 指定 route。
第 7 行
<router-view/>
為 component 的 place holder,將來改變 route,component 的切換就是在 <router-view/>
。
Build Target
實際將 Vue build 起來,看看 Vue Route 如何支援 lazy loading。
$ yarn build
在專案目錄下輸入 yarn build
將整個專案編譯打包到 dist
目錄下。
chunk-vendors.*.js
:在 node_modules
所使用的 package,如 Vue、Vue Router、Axios 會被編譯在此。
app.*.js
:Root component app.vue
被編譯在此。
about.*.js
: About.vue
被編譯在此。
也就是當執行首頁時,只有下載 chunk-vendors.*.js
與 app.*.js
,只有當 about 被點擊時,才會下載 about.*.js
,如此可加速首頁的下載速度
yarn build 的所有檔案將放在 dist
目錄下,將這些檔案全部搬到 web server 即可
Deployment
Vue CLI 預設沒有提供 dist
目錄下的 web server,需另外安裝 package。
$ yarn global add serve
安裝 serve
package 於 global。
安裝 serve
package 完成。
$ serve dist
在專案目錄下輸入 serve dist
,其中 dist
為目錄名稱,因為 vue build
的所有檔案都放在 dist
目錄下。
serve
將 dist
目錄啟動在 http://localhost:5000
。
在 http://localhost:5000
成功執行 Vue。
Conclusion
- Vue CLI 已經將 Vue Router 整進來,讓我們可快速建立 route
- Vue Router 支援 lazy loading,可將 component 分別打包在個別的
.js
,增加首頁下載速度 - 若要執行
dist
目錄下的檔案,要另外安裝serve
套件 -
yarn serve
與serve dist
雖然都能執行,但原理不同;yarn serve
是執行src
目錄下的 JavaScript,而serve dist
是執行dist
目錄下的 JavaScript
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。