以前、インターネット上で動的ルーティング設定をいくつか見たことがありましたが、現在のプロジェクトとはあまり互換性がなかったので、自分で実装しました。主なアイデアは次のとおりです。 1. ルートを設定するときに ID をバインドします。バックエンドの開発が完了したら、バックエンドと ID を同期するだけです。この ID は一意であり、変更されません。この ID に基づいて、ルート アドレスとアイコンを見つけることができます。 定数 routerArr = [ { パス: ''、 名前: ''、 コンポーネント: () => import( /* webpackChunkName: "strategiesMaintain" */ '@/components/Layout/Index'), メタ: { 認証が必要: true、 id: 1, アイコン: 'iconzhanghuguanli', タイトル:「ルート1」 }, 子供たち: [{ パス: '/verificationLog', 名前: 'VerificationLog', コンポーネント: () => import( /* webpackChunkName: "verificationLog" */ '@/views/auditManage/verificationLog'), メタ: { 認証が必要: true、 id: 101, アイコン: 'icon-disanfangyanzhengrizhi', タイトル:「ルート11」 } }, { パス: '/systemLog', 名前: 'SystemLog', コンポーネント: () => import( /* webpackChunkName: "systemLog" */ '@/views/auditManage/systemLog'), メタ: { 認証が必要: true、 id: 102, アイコン: 'icon-xitongcaozuorizhi', タイトル:「ルート12」 } }] } ]; デフォルトの routerArr をエクスポートします。 2. 主にIDバインディングルートアドレスとiconClassに基づいて、ローカルルートとバックエンドからのルート間の接続を設定します。 「@/router/modules」から routerModules をインポートします。 '@/utils/http' から {http} をインポートします。 '@/store' からストアをインポートします。 'element-ui' から { Message } をインポートします const formateResData = (val) =>{ // ルーティングデータをフォーマットします const obj = {}; 定数fn = (arr)=>{ for(let i = 0,item;item = arr[i++];){ オブジェクト[アイテム['メタ']['id']] = { パス: アイテム['パス'], アイコンクラス: item['meta']['icon'] }; (item.children && item.children.length > 0)の場合{ fn(アイテム.children); } } } fn(値); obj を返します。 }; const MAPOBJ = formatResData(ルーターモジュール); const dealWithData = (navData) => { // メニューデータを処理する let firstLink = ""; 定数navIdArr = []; 定数fn = (arr) => { (let i = 0,item;item = arr[i++];) { item['iconClass'] = MAPOBJ[item.id].iconClass; アイテム['linkAction'] = MAPOBJ[item.id].path; navIdArr.push(アイテムID); if (!firstLink && !item.subMenu) { // デフォルトのジャンプを設定する firstLink = item['linkAction']; } if (item.subMenu && item.subMenu.length > 0) { fn(item.subMenu); } } } fn(ナビゲーションデータ); {navData、navIdArr、firstLink} を返します。 }; navIds = [] とします。 const getNav = async (to={},from={},next=()=>{})=>{ // ナビゲーション データを取得します const {code,data} = await http("/menu/list", {}, "GET"); // メニュー データを取得します // const data = require("@/mock/api/menuData"); // モック データを使用します const {navData,navIdArr,firstLink} = dealWithData(data); ストアをコミットします('setNavData', navData); navIds = navIdArr; if(to.fullPath == '/index'){ // ログインするかホームページに戻る next(firstLink); }else { // Refreshif(navIds.indexOf(to.meta.id) == -1){ // バックエンドは menuMessage.error('メニューが存在しないか、権限がありません') を返しませんでした。 戻る; } 次(); } } export const setGuard = (to={},from={},next=()=>{}) =>{ // 権限を設定します if(navIds.length === 0){ // メニューデータがまだ取得されていません getNav(to,from,next); }else { // メニューデータを取得します if(navIds.indexOf(to.meta.id) == -1){ // バックエンドはメニューを返しませんでした Message.error('メニューが存在しないか、権限がありません'); 戻る; } 次(); } } 3. mainjsで設定を導入する router.beforeEach((to, from, next) => { トークンを wlhStorage.get("authorization"); to.path == "/login"の場合{ storage.clear(); // キャッシュをクリア next(); } それ以外 { if (to.meta.requireAuth && token) { // ログイン setGuard(to,from,next); } else { // ログインしていない next("/login"); } } }) 要約する これで、Vue でルーティング権限を動的に設定する方法についての記事は終了です。Vue でルーティング権限を動的に設定する方法についての関連コンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: ランダムロールコールテーブルを実装するためのネイティブJavaScript
目次データベース接続数が急増した理由は何ですか? 1. はじめに2. 知識ポイント3. 練習するIV...
serializableシリアル化(問題なし)トランザクションは順次実行する必要があります。前のトラ...
主キー:キーワード: 主キー機能: null にすることはできず、一意である必要があります。主キーの...
目次MySQLマスタースレーブの基本原理3つのbinlog形式の比較混合形式のバイナリログが存在する...
データ共有プロトタイプにはどのようなデータを書き込む必要がありますか?共有する必要があるデータはプロ...
フロントエンド開発では、Ajax、jQuery ajax、axios、fetch など、データ要求を...
ダイナミックレム1. まず、現在の長さの単位を紹介しましょうpx em Mの幅 / 漢字の幅 1em...
オペレーティング·システム: Win10 ホームエディションDockerをインストールします:公式サ...
1. はじめに最近、CentOS での開発には多くの不便があることがわかりました。Windows/M...
最近、WeChatはAppleによってダークモードの開発を強制されました。ますます多くのウェブサイト...
コードをコピーコードは次のとおりです。 <html xmlns="">...
ケースの説明: - ページ効果を実現するためにテーブルを使用する- ハイパーリンクを機能させたくない...
1. 公式サイトからダウンロード: https://dev.mysql.com/downloads/...
0. 事前準備BIOS でセキュア ブートを無効にします。無効にしないと、サードパーティ ソースを...
docker コマンドを初めて使用する場合、権限の問題を確認するメッセージが表示されます。 unix...