Vue Router 基礎概念

栏目: 编程语言 · 发布时间: 4年前

内容简介: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 Router 基礎概念

使用 Vue CLI 的 vue create 建立 vue-router-basic

Vue Router 基礎概念

Vue Router 雖然為官方 package,但預設並沒有包含在 Vue 內,因此需要使用 Manually select features 另外安裝。

Vue Router 基礎概念

除了預設的 BabelLinter / Formatter 外,使用 space bar 選擇 Router

Vue Router 基礎概念

History Mode 選擇 n

至於什麼是 History Mode ,會使用專文解釋

Vue Router 基礎概念

選擇 ESLint with error prevention only

Vue Router 基礎概念

選擇 Lint on save

Vue Router 基礎概念

選擇 In dedicated config files ,也就是 Babel、PostCSS、ESLint … 等 工具 都有自己的 config 檔,而不會全部集中在 package.json

Vue Router 基礎概念

Save this as a preset for future projects 選擇 n ,也就是預設不使用 Vue Router。

Vue Router 基礎概念

成功建立含有 Vue Router 的 project。

Vue Router 基礎概念

package.json 可以看到 "vue-router" : "^3.0.3" ,表示 vue-router 預設已經安裝成功

$ yarn serve

Vue Router 基礎概念

在專案目錄下輸入 yarn serve 啟動 Vue CLI 內建的 web serve。

Vue Router 基礎概念

Vue 內建 web server 預設啟動在 http://localhost:8080

Vue Router 基礎概念

  1. Home 的 route 為 /
  2. 與 Vue 預設專案不同,已經多了 HomeAbout

Vue Router 基礎概念

  1. About ,則進入了 About page
  2. 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';

importvue-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

Vue Router 基礎概念

在專案目錄下輸入 yarn build 將整個專案編譯打包到 dist 目錄下。

Vue Router 基礎概念

chunk-vendors.*.js :在 node_modules 所使用的 package,如 Vue、Vue Router、Axios 會被編譯在此。

app.*.js :Root component app.vue 被編譯在此。

about.*.jsAbout.vue 被編譯在此。

也就是當執行首頁時,只有下載 chunk-vendors.*.jsapp.*.js ,只有當 about 被點擊時,才會下載 about.*.js ,如此可加速首頁的下載速度

yarn build 的所有檔案將放在 dist 目錄下,將這些檔案全部搬到 web server 即可

Deployment

Vue CLI 預設沒有提供 dist 目錄下的 web server,需另外安裝 package。

$ yarn global add serve

Vue Router 基礎概念

安裝 serve package 於 global。

Vue Router 基礎概念

安裝 serve package 完成。

$ serve dist

Vue Router 基礎概念

在專案目錄下輸入 serve dist ,其中 dist 為目錄名稱,因為 vue build 的所有檔案都放在 dist 目錄下。

Vue Router 基礎概念

servedist 目錄啟動在 http://localhost:5000

Vue Router 基礎概念

http://localhost:5000 成功執行 Vue。

Conclusion

  • Vue CLI 已經將 Vue Router 整進來,讓我們可快速建立 route
  • Vue Router 支援 lazy loading,可將 component 分別打包在個別的 .js ,增加首頁下載速度
  • 若要執行 dist 目錄下的檔案,要另外安裝 serve 套件
  • yarn serveserve dist 雖然都能執行,但原理不同; yarn serve 是執行 src 目錄下的 JavaScript,而 serve dist 是執行 dist 目錄下的 JavaScript

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

浪潮之巅(上册)

浪潮之巅(上册)

吴军 / 人民邮电出版社 / 2013-5-1 / 35.00元

《浪潮之巅(第2版)(上册)》不是一本科技产业发展历史集,而是在这个数字时代,一本IT人非读不可,而非IT人也应该阅读的作品。一个企业的发展与崛起,绝非只是空有领导强人即可达成。任何的决策、同期的商业环境,都在都影响着企业的兴衰。《浪潮之巅》不只是一本历史书,除了讲述科技顶尖企业的发展规律,对于华尔街如何左右科技公司,以及金融风暴对科技产业的冲击,也多有着墨。此外,《浪潮之巅》也着力讲述很多尚在普......一起来看看 《浪潮之巅(上册)》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

html转js在线工具
html转js在线工具

html转js在线工具