成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Vue中怎么實現(xiàn)自動化路由

Vue中怎么實現(xiàn)自動化路由,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

禹會網站建設公司成都創(chuàng)新互聯(lián)公司,禹會網站設計制作,有大型網站制作公司豐富經驗。已為禹會成百上千家提供企業(yè)網站建設服務。企業(yè)網站搭建\外貿營銷網站建設要多少錢,請找那個售后服務好的禹會做網站的公司定做!

為什么要自動化路由

路由自動化在于解決以下的問題:

  • 每次新建頁面時的重復操作:在路由文件中添加對應的路由對象。

  • 路由與代碼耦合:路由依賴于路由對象的硬編碼,當某一路由發(fā)生變動時,勢必需要修改對應的路由對象。當路由層級、路徑發(fā)生改變時,甚至可能面臨的是整個路由對象數(shù)組的重寫。

  • 路由之間進行跳轉時的硬編碼。

目的很簡單,在開發(fā)過程中,開發(fā)者僅需要做兩件事即可:

  • 為這個路由命名

  • 在對應的目錄下創(chuàng)建 .vue 文件

開發(fā)過程中只需要做這兩步,無需再去關心路由對象如何編寫。

甚至可以忽略第一步,對于小型項目而言。

自動化路由規(guī)則

這些規(guī)則一部分是給開發(fā)者看,另一部分是給程序看的:

  1. 路由目錄需要指定

  2. 路由目錄下,每一層(一個文件夾即為一層) 必須要有一個 Layout.vue 文件,用來渲染子路由。

  3. 路由目錄下的組件路徑即為其對應的路由,比如指定了 src/views 文件夾,里面的 src/views/admin/users 對應的路由即是: localhost/admin/users 。

  4. 路由目錄下不區(qū)分大小寫,統(tǒng)一轉換成小寫處理。

以上便是我們制定的自動化路由規(guī)則。

定義

先提取出三個概念:

自動化路由的提供者,它就是 對外開放的接口,開發(fā)者只需要使用它就可以。

視圖,指的是一個視圖組件的相關信息,比如路徑、名稱等等。

路由,指的是解析視圖之后對應的路由對象,用于生成 vue-router 的路由對象。

開始開發(fā)

由于代碼過長,這里將代碼上傳至 Github , 有興趣的童鞋可以去看看。

這里只描述一下整體流程以及關鍵部分的代碼思路。

  1. 先通過 require.context 獲取到指定目錄下的所有 .vue 文件。

  2. 通過前綴以及排序操作,將其還原成目錄結構。

  3. 通過還原的目錄結構,進行解析。

  4. 將解析后的結構轉換成路由對象。

其中最關鍵的地方便是通過 require.context 獲取到的文件列表還原成原來的樹形結構。

還原成樹形結構之后就可以對應樹形結構進行路由對象的生成了。

首先將文件列表進行排序,根據文件的深度進行排序,深度淺的在前,深的在后。

_getViews(dir) {
  let views = [];

  let keys = dir.keys();
  for (let index in keys) {
    let path = keys[index];
    let component = dir(path);
    views.push(View.create(path, component.default || component))
  }
  views = views.sort((x, y) => { return x.Deep > y.Deep ? 1 : -1; });
  return views;
}

根據排序后的列表對目錄結構進行還原:

/**
 * 解析views,生成對應的目錄結構
 * @private
 */
_generateDirectory() {
  for (let index in this._views) {
    let view = this._views[index];
    this._directory.addView(view);
  }
}

addView 方法:

addView(view) {
  if(this.isCurrentDirectoryView(view)) {
    this._views.push(view);
  } else if(this._isInSubDirectory(view)) {
    this._addInSubDirectory(view);
  } else {
    let newSubDirectory = this._createSubDirectory(view);
    newSubDirectory.addView(view);
    this._subDirectory.push(newSubDirectory);
  }
}

對于目錄還原時有三種可能:

  • 這個文件就是當前目錄下的文件

  • 這個文件是當前目錄下已有子目錄的文件

  • 這個文件是當前目錄下子目錄的文件,且為首次出現(xiàn)

將目錄還原后,就可以根據目錄生成對應的路由對象。并且在生成時可以做一些定制化的需求,比如開篇提出來的需求:

  • 如果當前文件是 Layout.vue ,即默認為當前路由的根路由

  • 如果當前文件是 Index.vue , 即默認為當前層的空路由(根路由入口直接渲染)

使用方法,將 router.js 中的路由對象替換成自動生成的即可:

import Vue from 'vue'
import Router from 'vue-router'
import Generator from './routerGenerator/generator';

Vue.use(Router);

let generator = new Generator(require.context('./views', true, /\.vue$/));

export default new Router({
 routes: [generator.generate()]
})

目錄結構如下:

Vue中怎么實現(xiàn)自動化路由

效果如下:

Vue中怎么實現(xiàn)自動化路由

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。

當前文章:Vue中怎么實現(xiàn)自動化路由
文章地址:http://jinyejixie.com/article2/ggidoc.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、外貿網站建設、網站設計、網站設計公司、商城網站、動態(tài)網站

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都網站建設
荣昌县| 新余市| 凤翔县| 涞源县| 大连市| 呼伦贝尔市| 龙南县| 广丰县| 临城县| 吉隆县| 沭阳县| 平陆县| 连山| 正安县| 荥阳市| 留坝县| 嫩江县| 增城市| 竹北市| 慈溪市| 竹山县| 罗甸县| 平利县| 鄂托克旗| 巫山县| 金昌市| 台南市| 高台县| 基隆市| 精河县| 澄江县| 方城县| 乌拉特前旗| 营口市| 西吉县| 桃源县| 龙江县| 岳普湖县| 隆安县| 肥西县| 明水县|