Vueカスタムv-has命令、ボタン権限判定の手順

Vueカスタムv-has命令、ボタン権限判定の手順

アプリケーションシナリオ

バックグラウンド管理システムを例にとると、各ユーザーには異なるボタン権限があります。管理者が権限を設定した後、ユーザーがログインすると、インターフェイスからボタン権限リストが取得され、バックグラウンド データに基づいて表示するボタンが決定されます。

簡単に言えば、カスタム指示

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…

公式サイトにわかりやすく説明されているので、ここでは詳しくは説明しません。

原理

カスタム命令のソースコードに興味があるなら、それを非常にわかりやすく説明した記事もあります。

//www.jb51.net/article/209716.htm

原則は次のとおりです。

  • Vue の属性を解析するときは、各属性を走査します。
  • 命令情報を保存するには、オブジェクトにディレクティブ属性を追加します。
  • レンダリングが完了すると、ディレクティブ モジュールの create フック関数が実行されます。
  • Vueコンパイルによって生成された仮想ノード、つまりVNodeが親ノードに挿入された後に、
  • 各関数を順番に実行し、カスタム定義の挿入フック関数を実行します。

カスタムディレクティブ 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の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Vueカスタム命令とその使用方法の詳細な説明
  • ボタンの権限判定を実装するためのVueカスタムv-has命令
  • Vue 3 カスタムディレクティブ開発の概要
  • Vue3.0 カスタム命令(命令)知識の要約
  • 8つの非常に実用的なVueカスタム指示
  • Vueのカスタム命令の詳細な説明
  • 入力ボックスの入力値を制限する Vue カスタム ディレクティブの手順と完全なコード
  • Vueカスタム指示と動的ルーティングによる権限制御の実現
  • Vueカスタム命令によるメモリリーク問題を解決する
  • VUE がドラッグ指示をカスタマイズするときに、onmouseup イベントと click イベント間の競合を解決する
  • Vue の v-bind:style 効果のカスタム命令の詳細な説明
  • Vue 3.0 カスタムディレクティブの使い方

<<:  MySQL 5.7.20 圧縮版のダウンロードとインストールの簡単なチュートリアル

>>:  よくある Linux 英語エラーの中国語翻訳 (初心者必見)

推薦する

arcgis.js は、マップ本体の表示範囲を制御し、領域を超えた場合に自動的にバウンスするようにします (実装のアイデア)

目次背景効果アイデア背景少し前に、会社のプロジェクトで問題が発生しました。地図のベースマップ領域の範...

CentOS での MySQL ワークベンチのインストールと設定のチュートリアル

この記事では、MySQL Workbenchのインストールと設定のチュートリアルを参考までに紹介しま...

MYSQL フルバックアップ、マスタースレーブレプリケーション、カスケードレプリケーション、および半同期の概要

MySQL フルバックアップ1. バイナリログを有効にし、データベースから分離して別々に保存する v...

my.cnf (my.ini) 重要なパラメータの最適化設定手順

MyISAM ストレージエンジンMyISAM ストレージ エンジンは、書き込みよりも読み取りが多く、...

HTML で 2 つの div タグの間に垂直線を描く方法

最近、インターフェースを描画しているときに、インターフェースに垂直線を描画し、この垂直線の高さが親 ...

JSは5つ星の賞賛効果を達成

JS を使用してオブジェクト指向メソッドを実装し、JD.com の 5 つ星レビュー効果を実現します...

ウェブサイトのアクセス速度を向上させるための徹底的な最適化に関するヒント

ウェブサイトのアクセス速度を向上させるための徹底的な最適化に関するヒント。ウェブサイトのアクセス速度...

HTML ul および li タグを使用して画像を表示するサンプル コード

以下のコードをDreamweaverのコードエリアにコピーすると、プレビュー時に以下の画像が表示され...

Chrome 73 によるフレックスレイアウトの崩れの解析と解決方法

現象プロジェクトにはネストされたフレックス構造がいくつかあります。 <スタイル> /* ...

React のグローバル状態管理の 3 つの基本メカニズムの調査

目次序文小道具コンテクスト州要約する序文最新のフロントエンド フレームワークはすべて、コンポーネント...

Winows Server 2019 アクティベーション コードとボリューム ライセンス エディション KMS インストール キー GVLK

最近、社内文書の整理とファイルサーバーの構成を予定しています。以前はサーバー2003を使い慣れていま...

MySQL共通インデックスとユニークインデックスの選択に関する詳細な分析

各人が固有の携帯電話番号で登録し、ビジネス コードによって重複する携帯電話番号が 2 つ書き込まれな...

画像拡大鏡効果のJSバージョン

この記事では、画像拡大鏡効果を実現するためのJSの具体的なコードを参考までに紹介します。具体的な内容...

Nginx で複数のドメイン名がドメインをまたいでアクセスできるようにマップを使用する方法

一般的なNginx構成ではクロスドメインが可能 サーバー{ 11111 を聞いてください。 serv...