vue iview は動的ルーティングを作成します
今回は、vue iview で動的ルーティングを作成する方法をお届けします。vue iview で動的ルーティングを作成する際の注意点は何ですか?実際の事例を見てみましょう。
目標を達成する
クライアントはサーバーからルーティングと権限のデータを取得した後、プロジェクトのルーティングとメニューのリストを更新し、権限を制御します。
プロジェクトの基礎
基本フレームワーク: iview コンポーネント ライブラリ 公式テンプレート プロジェクト iview-admin のテンプレート ブランチ プロジェクト、このプロジェクトは iview-admin の基本フレームワーク コードです。プロジェクトアドレス: iview-admin
実装ロジック
動的ルーティング制御の読み込み
一般に、動的ルーティング制御は2つのタイプに分けられます。1つは、すべてのルーティングデータをローカルファイルに保存し、その後取得するものです。サーバーからユーザーの権限情報を取得し、ルートジャンプ時の権限判定フックを追加します。ユーザーが遷移したページが権限リストにない場合、ジャンプを禁止します。もう 1 つは、エラー処理ページや権限なし制御ページなどの基本ルートのみをローカルに保存し、サーバーはユーザーの権限に基づいて対応するルーティング データを発行し、クライアントはこれらを使用します。ルーティング用のデータは動的に生成および追加されるため、この記事では 2 番目の方法を使用します。
iview-admin プロジェクトはルートを 3 つのタイプに分けます:
メインコンポーネントのサブページとして表示されないページルート (ログイン、404、403、およびサブとしてのその他のエラーページルート)。 - メインコンポーネントのページ。otherRouter は表示されますが、ホームページのルーティングなど、メインコンポーネントのサブページとして表示され、左側のメニューに表示されます。
- ルーティング データを取得した後、主に 2 つのことを行います。操作の一部、最初の部分はデータを走査し、コンポーネントの非同期読み込みメソッドを使用して各ルーティング ノードに対応するコンポーネントを読み込み、ページ タグを使用します。
フレームワークの下で appRouter を走査してルーティング情報を取得するパンくずリスト ナビゲーションも必要です。ルーティング データはグローバル アクセスのために vuex に保存されます。
404 ページが静的ルートの場合、初めてページに入ったときは動的ルートがまだロードされていないことに注意してください。ルーティング アドレスが見つからない場合は、そのページにジャンプします。デフォルトでは 404 エラー ページが表示され、エクスペリエンスが非常に悪いため、404 ルートは最初にルーティング ルールに書き込まれず、動的ルーティングと一緒に読み込まれます。 メインコードは次のように実装されます:
データリクエストとルーティングノード生成
//util.js //生成路由 util.initRouter = function (vm) { const constRoutes = []; const otherRoutes = []; // 404路由需要和动态路由一起注入 const otherRouter = [{ path: '/*', name: 'error-404', meta: { title: '404-页面不存在' }, component: 'error-page/404' }]; // 模拟异步请求 util.ajax('menu.json').then(res => { var menuData = res.data; util.initRouterNode(constRoutes, menuData); util.initRouterNode(otherRoutes, otherRouter); // 添加主界面路由 vm.$store.commit('updateAppRouter', constRoutes.filter(item => item.children.length > 0)); // 添加全局路由 vm.$store.commit('updateDefaultRouter', otherRoutes); // 刷新界面菜单 vm.$store.commit('updateMenulist', constRoutes.filter(item => item.children.length > 0)); }); }; //生成路由节点 util.initRouterNode = function (routers, data) { for (var item of data) { let menu = Object.assign({}, item); menu.component = lazyLoading(menu.component); if (item.children && item.children.length > 0) { menu.children = []; util.initRouterNode(menu.children, item.children); } //添加权限判断 meta.permission = menu.permission ? menu.permission : null; //添加标题 meta.title = menu.title ? menu.title : null; menu.meta = meta; } };
router.addRoutes(routes)
完成路由列表的动态添加;第二部分是因为 iview-admin
動的読み込みコンポーネント
//lazyLoading.js export default (url) =>()=>import(`@/views/${url}.vue`) Store缓存实现 //app.js // 动态添加主界面路由,需要缓存 updateAppRouter (state, routes) { state.routers.push(...routes); router.addRoutes(routes); }, // 动态添加全局路由,不需要缓存 updateDefaultRouter (state, routes) { router.addRoutes(routes); }, // 接受前台数组,刷新菜单 updateMenulist (state, routes) { state.menuList = routes; }
//main.js mounted () { // 调用方法,动态生成路由 util.initRouter(this); }
権限制御
動的ルーティングの実装と同様操作許可制御には大きく分けて 2 種類あり、1 つはページ表示時に許可を制御しない、操作開始時に許可判定を行う方法です。 2 番目の方法は、ページの読み込み時に権限を判断し、権限のない操作は表示されません。私は、ユーザーに誤解を与えない 2 番目の方法を好みます。個人的には、ユーザーに表示されるものが操作可能であるべきだと考えています。そうしないと、ボタンをクリックした後に許可がないとメッセージが表示されるのは非常に不快です。
このプロジェクトのアイデアのソースは、参照ブログ投稿にあります。元のブロガーの具体的なアイデアは、ルーティング構造のメタ フィールドにユーザー操作権限のリストを追加し、グローバル コマンドを登録するというものです。ノードが初めてレンダリングされ、ページに権限があるかどうかを確認し、権限が存在し、渡されたパラメータが権限リストにない場合は、ノードを直接削除します。 メインコードは次のように実装されます:ルーティングデータに許可フィールドを追加して許可リストを保存します
//menu.json,模拟异步请求数据 [ { "path": "/groupOne", "icon": "ios-folder", "name": "system_index", "title": "groupOne", "component": "Main", "children": [ { "path": "pageOne", "icon": "ios-paper-outline", "name": "pageOne", "title": "pageOne", "component": "group/page1/page1", "permission":["del"] }, ... ] } ]
//util.js //生成路由节点 util.initRouterNode = function (routers, data) { for (var item of data) { .... //添加权限判断 meta.permission = menu.permission ? menu.permission : null; ... } };
//hasPermission.js const hasPermission = { install (Vue, options) { Vue.directive('hasPermission', { bind (el, binding, vnode) { let permissionList = vnode.context.$route.meta.permission; if (permissionList && permissionList.length && !permissionList.includes(binding.value)) { el.parentNode.removeChild(el); } } }); } }; export default hasPermission;
<template> <p> <h1>page1</h1> <Button v-hasPermission="'add'">添加</Button> <Button v-hasPermission="'edit'">修改</Button> <Button v-hasPermission="'del'">删除</Button> </p> </template>
グローバル登録コンポーネント
// main.js import hasPermission from '@/libs/hasPermission.js'; Vue.use(hasPermission);
ページタグとブレッドクラムナビゲーション
私の意見では、ページタグとブレッドクラムはシステム内のページ関連コントロールのおまけであり、ページ管理の利便性を向上させます。これら 2 つは iview 公式に実装されています。管理プロジェクトのコンポーネント。したがって、このプロジェクトではコンポーネントの機能を移植して実装しただけであり、詳細な理解はできませんでした。興味のある方はじっくり学習してください。
この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。
推奨読書:
以上がvue iview は動的ルーティングを作成しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









HTMLテンプレートのボタンをメソッドにバインドすることにより、VUEボタンに関数を追加できます。 VUEインスタンスでメソッドを定義し、関数ロジックを書き込みます。

vue.jsでBootstrapを使用すると、5つのステップに分かれています。ブートストラップをインストールします。 main.jsにブートストラップをインポートしますブートストラップコンポーネントをテンプレートで直接使用します。オプション:カスタムスタイル。オプション:プラグインを使用します。

vue.jsでJSファイルを参照するには3つの方法があります。タグ;; mounted()ライフサイクルフックを使用した動的インポート。 Vuex State Management Libraryを介してインポートします。

Vue.jsの監視オプションにより、開発者は特定のデータの変更をリッスンできます。データが変更されたら、Watchはコールバック関数をトリガーして更新ビューまたはその他のタスクを実行します。その構成オプションには、すぐにコールバックを実行するかどうかを指定する即時と、オブジェクトまたは配列の変更を再帰的に聴くかどうかを指定するDEEPが含まれます。

vue.jsには、前のページに戻る4つの方法があります。$ router.go(-1)$ router.back()outes&lt; router-link to =&quot;/&quot; Component Window.history.back()、およびメソッド選択はシーンに依存します。

VUEマルチページ開発は、VUE.JSフレームワークを使用してアプリケーションを構築する方法です。アプリケーションは別々のページに分割されます。コードメンテナンス:アプリケーションを複数のページに分割すると、コードの管理とメンテナンスが容易になります。モジュール性:各ページは、簡単に再利用および交換するための別のモジュールとして使用できます。簡単なルーティング:ページ間のナビゲーションは、単純なルーティング構成を介して管理できます。 SEOの最適化:各ページには独自のURLがあり、SEOに役立ちます。

VUEにDIV要素をジャンプするには、VUEルーターを使用してルーターリンクコンポーネントを追加するには、2つの方法があります。 @clickイベントリスナーを追加して、これを呼び出します。$ router.push()メソッドをジャンプします。

vue.jsのforeachループは、v-forディレクティブを使用します。これにより、開発者は各要素を配列またはオブジェクトの各要素を繰り返し、各要素で特定の操作を実行できます。構文は次のとおりです。&lt; Template&gt; &lt; ul&gt; &lt; li v-for =&quot;アイテムの項目&gt;&gt; {{item}}&lt;/li&gt; &lt;/ul&gt; &lt;/template&gt;&am
