以前、インターネット上で動的ルーティング設定をいくつか見たことがありましたが、現在のプロジェクトとはあまり互換性がなかったので、自分で実装しました。主なアイデアは次のとおりです。 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. 心の旅最近コックピットを書いていたときに、背景画像を単純に特定の角度に回転させるという問題につ...
<br />適度に画像を追加すると、Web ページがより美しくなります。 画像タグ &l...
方法1: SET PASSWORDコマンドを使用する MySQL -u ルート mysql> ...
目次Docker-Maven-プラグインMavenプラグインの自動デプロイメント手順1. ホストマシ...
多くの人が、ウェブサイト上のテキストはデザインする必要があるのかと疑問に思うかもしれません。多く...
導入された HTML タグは、必ずしも XHTML 仕様に完全に準拠しているわけではありません。実際...
思いつきで、小さなボールが跳ね返るケーススタディを書いてみました。具体的な内容は以下のとおりです。主...
1. 設置環境1. HUAWEI mate x CPU i5 82500u、8g メモリ、独立グラフ...
<br />おそらく、あなたは会社に入社したばかりで、その会社が「ユーザビリティ」に関す...
序文開発プロセスにおいて、変数の定義は非常に頻繁かつ基本的なタスクです。変数の使用シナリオと範囲に応...
JDBC の 6 つのステップ: 1. ドライバーを登録する2. データベース接続を取得する3. デ...
.NET SDK ダウンロード リンクhttps://dotnet.microsoft.com/do...
Linux/Mac の MySQL パスワードを忘れた場合はどうすればいいですか?心配しないでくださ...