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

推薦する

Vueは動的クエリルール生成コンポーネントを実装します

1. 動的クエリルール動的クエリルールは、おおよそ次の図のようになります。ユーザのカスタマイズに応じ...

Linux のよく使うコマンドの使い方を詳しく解説(第 2 回)———— テキストエディタのコマンド vi/vim

vi/vim の紹介どちらもマルチモード エディターです。違いは、vim が vi のアップグレー...

クリックイメージ反転効果を実現するJavaScript

最近、顔コレクションに関するプロジェクトに取り組んでいましたが、フロントエンドモジュールを書いている...

CentOS システムでの JDK のインストールと設定の概要

目次序文OpenJDKの確認とアンインストールダウンロードした圧縮パッケージを使用してJDKをインス...

MySQLでANDとORを組み合わせる問題を解決する

以下のように表示されます。 SELECT prod_name,prod_price FROM pro...

nginx の default_server 定義とマッチングルールの詳細な説明

nginx の default_server ディレクティブは、server_name と一致しない...

ウェブページのFOUC問題によるウェブページの混乱の解決策

FOUC は Flash of Unstyled Content の略で、FOUC と略されます。簡...

jsは古典的なマインスイーパゲームを実装します

この記事の例では、古典的なマインスイーパゲームを実装するためのjsの具体的なコードを参考までに共有し...

Vue/React シングルページ アプリケーションをリフレッシュなしで復元するソリューション

目次導入なぜわざわざ?落とし穴のあるコミュニティソリューション(Vue を例に挙げる)現時点では良い...

MySQL のファントムリード問題を解決する方法

目次序文1. ファントムリーディングとは何ですか? 2. ファントムリーディングの問題点は何ですか?...

MySQL 5.7.19 winx64 無料インストールバージョン設定チュートリアル

mysql-5.7.19-winx64インストールフリー版の設定方法、参考までに具体的な内容は以下の...

Centos7 環境でバイナリ インストール パッケージから mysql5.6 をインストールする方法の詳細な説明

この記事では、centos7 環境でバイナリ インストール パッケージを使用して mysql5.6 ...

Vue の element-ui コンポーネントのデフォルトの CSS スタイルを変更する 4 つの方法

目次序文1. グローバル統合オーバーライドを使用する2. .vueファイルを変更する3. コンポーネ...

行間隔が広い場合の解決策(IE では 5 ピクセル多い)

コードをコピーコードは次のとおりです。 li {幅:300px; 高さ:23px; 行の高さ:24p...