以前、インターネット上で動的ルーティング設定をいくつか見たことがありましたが、現在のプロジェクトとはあまり互換性がなかったので、自分で実装しました。主なアイデアは次のとおりです。 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
序文最近、仕事の都合で、約 1000w の大量のデータを MySQL に挿入する必要があり、時間がか...
目次序文根拠手順1. CDから仮想マシンを起動する2. GPartedツールを使用してパーティション...
iframe を使用すると、他の Web サイトのページを簡単に呼び出すことができますが、注意して使...
目次序文グラフィックドライバーをインストールするCUDAをアンインストールするCUDAをインストール...
MySQL をインストールすると初期パスワードが与えられますが、この初期パスワードは大文字と小文字の...
目次JavaScript イベント:よく使用されるイベント:イベントアクション要約するJavaScr...
<br />ポテトチップスパーティーのこのエピソードに参加して、何人かの友達に会えてとて...
方法 1: readonly 属性を true に設定します。入力値=読み取り専用 readOnly...
Docker を起動したら、利用できるオプションを見てみましょう。 公式のものがある場合は、もちろ...
目次依存関係をインストールする構成使用1.アイコン検索ページに入る2. 使用したいアイコンの英語名を...
この記事の例では、テーブルを動的に生成したり行を削除したりするためのJavaScriptの具体的なコ...
フロントエンドのクロスドメイン問題に2日間近く悩まされましたが、ようやくngnxを使って解決したので...
1. Docker とは何ですか? (1)DockerはLinuxコンテナ内でアプリケーションを実行...
前回の記事では、nginx がリクエスト ラインのデータを読み取って、リクエスト ラインを解析する方...
Linux では、アプリケーションをダウンロードしてインストールすると、起動時にアプリケーション名...