内容简介: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,則進入了Aboutpage -
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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。