vue構成ファイルはルーティングとメニューインスタンスコードを自動的に生成します

vue構成ファイルはルーティングとメニューインスタンスコードを自動的に生成します

前面に書かれた

ルートを繰り返し記述するたびにイライラしていませんか? 特にプロジェクトが大きい場合、ルートが多すぎて追跡できないこともあります。そこで、ここではルートの簡単な構成を行う router.json 構成ファイルを用意し、ルートと左側のメニュー バーを同時に生成できるようにしました。

ルータ.json

主な設定項目は次のとおりです。

{
  "名前": "ルータ構成",
  「メニュー」: [{
    "id": "1", //ルートID、繰り返すことはできません"name": "home", //ルート名"path": "/homePage", //ルートパス"label": "Home", //メニュータイトル"selected": true, //デフォルトで選択されています"icon": "el-icon-monitor", //メニュー表示アイコン"open": true, //デフォルトで開いています"component": "homePage/homePage.vue", //コンポーネントルート"children": [ //サブメニュー {
        "id": "3",
        "名前": "getCover",
        "パス": "/getCover",
        "label": "カバーキャプチャ",
        「選択済み」: false、
        "アイコン": "el-icon-scissors",
        「開く」: 偽、
        "コンポーネント": "getCover/getCover.vue",
        "子供たち": []
      }
    ]
  },{
    "id": "2",
    "名前": "テストページ",
    "パス": "/testPage",
    "ラベル": "テスト",
    「選択済み」:偽、
    "アイコン": "el-icon-setting",
    「開く」: 偽、
    "コンポーネント": "test/test.vue",
    "子供たち": []
  },{
    "id": "5",
    "名前": "テストメニュー",
    "パス": "/testMenu",
    "label": "メニューテスト",
    「選択済み」:偽、
    "アイコン": "el-icon-setting",
    「開く」: 偽、
    "コンポーネント": "testMenu/testMenu.vue",
    "子供たち": []
  }]
}

設定は主にメニュー生成用とルート生成用の2つの部分に分かれています。もちろん、両者に共通する部分もあります。

ルート生成

'vue' から Vue をインポートします
'vue-router' から VueRouter をインポートします。
「element-ui/src/locale/lang/ro」からroをインポートします。
Vue.use(VueRouter)
//設定ファイルrouter.jsonを導入する
routerMenu を require('@/config/router.json'); に設定します。
ルーターメニュー = routerMenu.menu;
メニューを[]にします。
//ルーティングを設定する let formatRoute = function (routerMenu,menu){
  for(let i = 0; i < routerMenu.length; i++){
    temp = {とする
      パス: routerMenu[i].path,
      名前: routerMenu[i].name,
      // require を使用してコンポーネントをインポートすると、コンポーネントは異なる js ファイルにパッケージ化されることに注意してください。これらは必要に応じて読み込まれます。この js ファイルは、ルート URL にアクセスしたときにのみ読み込まれます。
      コンポーネント: 解決 => require([`@/views/${routerMenu[i].component}`], 解決)
    };
    menu.push(temp);
    ルータメニュー[i].children && ルータメニュー[i].children.length > 0 の場合 {
    //サブメニュールートを再帰的に生成する formatRoute(routerMenu[i].children,menu);
    }
  }
}
//初期化 formatRoute(routerMenu,menu);
//リダイレクト設定 constroutes = [
  {
    パス: '/'、
    リダイレクト: '/homePage'
  },
]
//生成されたルーティングファイルをプッシュします for(let i = 0; i < menu.length; i++)
  ルートをプッシュします(メニュー[i]);
  
const ルーター = 新しい VueRouter({
  ルート
})

デフォルトルーターをエクスポートする

メニュー生成

<テンプレート>
  <div id="左メニュー">

  </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
  名前: "左",
  データ(){
    戻る {
      メニュー:[]
    }
  },
  方法:{
  //ルーティングIDでノードを検索する findNodeById(node,id){
      for(let i = 0; i < node.length; i++){
        if(id == ノード[i].id){
          ノード[i].selected = true;
          if(ノード[i].children && ノード[i].children.length > 0){
            ノード i の子ノードを id で見つけます。
          }
          ノード[i].open = !ノード[i].open;
          this.$route.path !== node[i].path の場合、 this.$router.push(node[i].path);
        }それ以外{
          ノード[i].selected = false;
          if(ノード[i].children && ノード[i].children.length > 0){
            ノード i の子ノードを id で見つけます。
          }それ以外{

          }
        }
      }
    },
    //メニューノードを選択する chooseNode(id){
      this.findNodeById(this.menu,id);
      domTree = this.generatorMenu(this.menu,'',0) とします。
      leftMenu を document.getElementById('leftMenu') とします。
      左メニュー.innerHTML = domTree;
    },
    //メニューディレクトリを動的に生成する generatorMenu(menu,temp,floor){
      for(let i = 0; i < menu.length; i++){
        temp += `<div style="width: max-content">
                    <div class="menuOption" onclick="chooseNode(${menu[i].id})"
                            スタイル="テキストインデント: ${floor}em;
                            背景色: ${menu[i].selected?'アクアマリン':''};
                            カーソル: ポインタ;
                            上マージン: 0.3rem;>
                        <i class="${menu[i].icon}"></i>
                        ${menu[i].label}`
        if(!menu[i].open && menu[i].children && menu[i].children.length > 0){
          温度 += `<i style="margin-left: 1rem" class="el-icon-arrow-down"></i>`
        }それ以外{
          メニュー[i].open && メニュー[i].children && メニュー[i].children.length > 0 の場合{
            温度 += `<i style="margin-left: 1rem" class="el-icon-arrow-up"></i>`
          }
        }
        温度 += `</div>`
        if(menu[i].open && menu[i].children && menu[i].children.length != 0){
          temp = this.generatorMenu(menu[i].children,temp,floor+1);
        }
        温度 += `</div>`
      }
      温度を返します。
    }
  },
  作成された() {

  },
  マウント() {
    ウィンドウを選択します。
    メニューを[]にします。
    //ルーティング メニュー構成ファイルを取得します。const router = require('@/config/router.json');
    メニュー = router.menu;
    this.menu = メニュー;
    domTree = this.generatorMenu(menu,'',0) とします。
    leftMenu を document.getElementById('leftMenu') とします。
    左メニュー.innerHTML = domTree;
  }
}
</スクリプト>

<スタイルスコープ>
  #左メニュー{
    最小高さ: calc(100vh - 44px - 1rem);
    背景色: コーンフラワーブルー;
    テキスト配置: 左;
    パディング: 0.5rem 1rem;
    フォントサイズ: 大きい;
    フォントの太さ: 太字;
  }
  .選択されたM{
    背景色: アクアマリン;
  }
  .menuOption{
    カーソル: ポインタ;
  }
</スタイル>

効果

左側のメニューは自動生成されています。メニューバーをクリックすると、対応するルーティングアドレスにジャンプします。もちろん、スタイルは少し醜いですが、後で自分でスタイルを調整できます。

この方法では、新しいメニューを追加するときに、設定ファイルで設定するだけで、ページを直接書き込むことができるため、時間も大幅に節約できます。

要約する

これで、vue 構成ファイルからルートとメニューを自動的に生成する方法についての記事は終了です。vue からルートとメニューを自動的に生成することに関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue のルーティングの動的追加とメニューメソッドの生成の例

<<:  MySQL 8.0.18はデータベースにユーザーを追加し、権限を付与します

>>:  bashの初期化メカニズムの詳細な説明

推薦する

pagodaを使用してionCube拡張機能をインストールする方法

1. まずパゴダを設置するインストール要件: Python バージョン: 2.6/2.7 (Pago...

IMG での UserMap の使用例

usemap は <img> タグの属性であり、使用するイメージ マップの名前を指定する...

Nodejs で WeChat アカウント分割を実装するためのサンプルコード

会社のビジネスシナリオでは、WeChat アカウント分割機能を使用する必要があります。公式 Web ...

docker+devpi を使用してローカル pypi ソースをビルドする方法

以前、開発で頻繁に pip ダウンロードを使用する必要がありました。pip ソースを国産ソースに変更...

JavaScript を使用した Web 計算機の作成

この記事は主にJavaScriptを使用してWeb計算機を実現する効果を記録し、参考として掲載してい...

CentOS7 のシステム サービスに Nginx を追加する方法

導入コンパイル、インストール、問題の解決後、Nginx は正常に動作していますが、現時点では Ngi...

Vueルーティングナビゲーションガードの簡単な理解

目次1. グローバルガード1. グローバル前線警備2. グローバル解像度ガード3. グローバルポスト...

nginx で第 3 レベルドメイン名を設定する方法の例

問題の説明nginx を設定することで、異なるポートを介して異なる Web アプリケーションにアクセ...

SSH経由でリモートLinuxシステムでコマンドを実行する方法

場合によっては、リモート マシンでいくつかのコマンドを実行する必要があることがあります。これが時々行...

Vueはv-modelを使用してel-paginationコンポーネントのプロセス全体をカプセル化します。

v-model を使用してページング情報オブジェクトをバインドします。ページング情報オブジェクトに...

jQueryは、マウスをドラッグしてdivの位置とサイズを変更する方法を実装しています。

Windows フォームと同様の効果を得るには、中央をドラッグして div の位置を変更し、端をド...

docker-compose ネットワーク設定についての簡単な説明

ネットワーク使用チュートリアル公式サイト docker-compose.yml リファレンスドキュメ...

Linux コマンドライン操作 Baidu クラウドのファイルのアップロードとダウンロード

目次0. 背景1. インストール2. Baidu Cloudアカウントにログインする3. ファイルを...

MySQL ストアド プロシージャで case ステートメントを使用する詳細な例

この記事では、例を使用して、MySQL ストアド プロシージャでの case ステートメントの使用方...

Dockerコンテナのセルフスタートを実装する方法

コンテナの自動起動Docker は、コンテナが終了したとき、または Docker が再起動されたとき...