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の初期化メカニズムの詳細な説明

推薦する

VMware14 に CentOS 7 をインストールするグラフィック チュートリアル

CentOS の紹介CentOS は、Red Hat Linux が提供する無料で利用できるソースコ...

HTML でフォントの色を設定する方法と、PS を使用して HTML で正確なフォントの色を取得する方法

1. HTMLフォントカラー設定HTML では、フォント タグを使用してフォント コンテンツの色を設...

Docker で既存のイメージに基づいて新しいイメージを構築する方法

既存のイメージから新しいイメージを構築することは、Dockerfile ドキュメントを通じて行われま...

Linux gzipコマンドの使用

1. コマンドの紹介gzip (GNU zip) コマンドは、ファイルの圧縮と解凍に使用されます。こ...

Zabbix と bat スクリプトを組み合わせて複数のアプリケーションの状態を監視する方法

シナリオシミュレーション:国内企業の中には、重要な業務をサポートするために特定のウィンドウ プログラ...

react+antdプロジェクトをゼロから構築する方法を教えます

これまでの記事はすべて私自身の学習記録であり、主に以前に遭遇した落とし穴を忘れないようにするためのも...

MySQLデータベースを使い始めるための最初のステップはテーブルを作成することです

データベースを作成する右クリック - 新しいデータベースを作成ライブラリ名を入力し、文字セットと並べ...

Window.nameはクロスドメインデータ転送の問題を解決します

<br />原文: http://research.microsoft.com/~hel...

マークアップ言語 -

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...

Linux環境にDocker環境をインストールする(落とし穴なし)

目次インストールの前提条件ステップ1: システムの残りを確認してクリアし、Dockerの依存関係をイ...

IDEA が MySQL ポート番号占有に接続できない問題の解決方法

コマンドラインでMYSQLに正常にログインでき、NavicatもMySQLに正常に接続できますが、I...

写真とテキストによる MySQL と sqlyog のインストール チュートリアル

1. MySQL 1.1 MySQLのインストールmysql-5.5.27-winx64 ダウンロー...

Zabbixで電子メールアラートを実装する方法

オンラインチュートリアルに従って実装しました。 zabbix3.4、スクリプトとsendEmailを...

フローティングをクリアするいくつかの方法(推奨)

1. 同じタイプの空の要素を追加し、要素の CSS 属性 clear:both; を設定します。 ...

Linuxコマンドに基づいてフォルダー内の特定のファイルパスを抽出します

最近では、特定のフォルダ内の特定のファイルを自動的に検索する必要があり、ファイルパスとファイル名を別...