アプリケーションシナリオバックグラウンド管理システムを例にとると、各ユーザーには異なるボタン権限があります。管理者が権限を設定した後、ユーザーがログインすると、インターフェイスからボタン権限リストが取得され、バックグラウンド データに基づいて表示するボタンが決定されます。 簡単に言えば、カスタム指示 Vue.js公式サイトのカスタム命令の説明 cn.vuejs.org/v2/guide/cu… 基本概念 コア関数のデフォルトの組み込み命令 (v-model および v-show) に加えて、Vue ではカスタム命令を登録することもできます。 Vue 2.0 では、コードの再利用と抽象化の主な形式はコンポーネントです。ただし、場合によっては、通常の DOM 要素に対して低レベルの操作を実行する必要があり、その場合はカスタム命令が使用されます。 たとえば、v-focusディレクティブをカスタマイズすると、ページが読み込まれると入力ボックスにフォーカスが当たります。 <入力vフォーカス> グローバルカスタマイズ // グローバルカスタムディレクティブ `v-focus` を登録します Vue.directive('focus', { // バインドされた要素が DOM に挿入されると... 挿入: 関数 (el) { // 要素にフォーカス el.focus() } }) ローカルカスタマイズ // ローカル ディレクティブを登録する場合、コンポーネントはディレクティブ オプションも受け入れます。 ディレクティブ: { 集中: // 挿入された命令の定義: function (el) { el.フォーカス() } } } フック機能 ディレクティブ定義オブジェクトは、次のフック関数を提供できます (すべてオプション)。 バインド ディレクティブが最初に要素にバインドされるときに 1 回だけ呼び出されます。ここで、1 回限りの初期化セットアップを実行できます。 挿入された バインドされた要素が親ノードに挿入されるときに呼び出されます (親ノードは存在することが保証されるだけで、必ずしもドキュメントに挿入されるわけではありません) アップデート コンポーネントの VNode が更新されたときに呼び出されますが、その子 VNode が更新される前に発生することもあります。命令の値は変更されている場合と変更されていない場合があります。ただし、更新前と更新後の値を比較することで、不要なテンプレートの更新を無視することができます。 コンポーネント更新 命令が配置されているコンポーネントの VNode とその子 VNode がすべて更新された後に呼び出されます。 解除する ディレクティブが要素からアンバインドされたときに 1 回だけ呼び出されます。 他の さらに、基本的な概念、フック関数パラメータ、動的命令パラメータなどもあります。 cn.vuejs.org/v2/guide/cu… 公式サイトにわかりやすく説明されているので、ここでは詳しくは説明しません。 原理 カスタム命令のソースコードに興味がある場合は、Blog Park に非常にわかりやすく説明されている記事もあります。 https://www.jb51.net/article/209716.htm 原則は次のとおりです。
カスタムディレクティブ v-has話題に戻りましょう。 今日は主にカスタム命令v-has、ボタン権限判定についてまとめます ログインインターフェースはボタン権限リストを取得し、それをローカルキャッシュ LOGIN_USER_BUTTON_AUTH に保存します。 データ形式は次のとおりです。 [ { "チェック済み":false, "成分":""、 "作成時間":"2019-06-29 18:21:06", "createUser":"026a564bbfd84861ac4b65393644beef", "アイコン":""、 "id":"1503273153861066776", "name":"本日のコレクション(事件ファイル)", "開く":"true", "親ID":"2328050996633395469", "親名":"ホーム", "権限":"sys:index:vol", "ソート":103, "ステータス":"0", "タイプ":"2", "更新時間":"2021-01-27 15:51:15", "updateUser":"026a564bbfd84861ac4b65393644ビーフ", 「URL」:"" } ] v-has ディレクティブの設定をカスタマイズする utilsフォルダにhasPermission.jsファイルを作成し、index.jsに均一にエクスポートします。 定数hasPermission = { インストール (Vue, オプション) { Vue.directive('has', { 挿入: (el, バインディング, vnode)=>{ filterGlobalPermission(el、バインディング、vnode); } }); } }; /** * グローバル権限制御 */ エクスポートconst filterGlobalPermission = (el, バインディング, vnode) => { permissionList を [] にします。 authList を JSON.parse(localStorage.getItem('LOGIN_USER_BUTTON_AUTH') || "[]" とします。 for (let auth of authList) { 権限リストをプッシュします(認証); } パーミッションリストの長さが等しい場合 el.parentNode.removeChild(el); 戻る; } 権限を [] にします。 for (let の permissionList の項目) { 権限をプッシュします(item.permission); } if (!permissions.includes(binding.value)) { el.parentNode.removeChild(el); } } デフォルトの hasPermission をエクスポートします。 utils ファイルの下にある index.js utilsフォルダ内の他のjsファイルもindex.jsにエクスポートできます。 './hasPermission' から hasPermission をインポートします。 エクスポート {hasPermission} main.js で導入 '@/utils' から {hasPermission} をインポートします Vue.use(hasPermission) コンポーネントでv-hasを使用して、ボタンの権限に基づいてボタンを表示するかどうかを決定します。 <el-button v-has="'sys:arch:add'" type="primary" size="mini" icon="el-icon-plus" @click="add('1')"> 追加</el-button> 要約するこれで、ボタンの権限判定を実装するための Vue カスタム v-has ディレクティブに関するこの記事は終了です。Vue カスタム v-has ディレクティブに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Mysql を 5.7 にアップグレードした後のグループ クエリの問題を解決する
>>: Linux コマンドラインからファイルを削除する実用的な方法
目次1. 変数意味のある名前を使う不必要なコンテキストを追加しないようにするハードコードされた値を避...
nginx をリバース プロキシ tomcat として使用する場合、セッション損失が発生する可能性が...
はじめに: 時間ポイントによる MySQL データベースの復旧どの企業にとっても、データは最も価値の...
1. フォワードプロキシとリバースプロキシの違いフォワード プロキシはクライアントのプロキシとして機...
問題の説明VMware Workstationが新しい仮想マシンを作成し、64ビットオペレーティング...
この記事では、MySQL 8.0.16 winx64のインストールと設定の具体的な方法を記載します。...
目次データ量匿名マウントと名前付きマウントデータボリュームの場所データ量匿名マウントと名前付きマウン...
目次序文REDOログの生成REDOログ送信REDOログの保存と通知ユーザースレッドに通知要約する序文...
この記事では、ログインボックスのドラッグ効果を実現するためのJavascriptの具体的なコードを参...
目次1. SVGを使用する2. fontAwesomeを使用する3 ソース4 結論テクノロジースタッ...
K8s k8s はクラスターです。クラスターには複数の名前空間があります。名前空間の下には複数のポッ...
JDKをダウンロードしてインストールするステップ 1: まず、公式 Web サイト http://...
この記事では、円形カルーセルを実装するためのJavaScriptの具体的なコードを参考までに紹介しま...
ご存知のとおり、SSH は現在、リモート ログイン セッションやその他のネットワーク サービスにセキ...
本から学ぶことは常に浅はかで、これがさらなるダウンタイムを引き起こすことには決して気づきません......