Vue3 で命令をカスタマイズするにはどうすればよいですか?次の記事では、Vue3 で命令をカスタマイズする方法について説明します。お役に立てば幸いです。
TienChin プロジェクトのフロントエンドは Vue3 です。フロントエンドには次のような要件があります。フロントエンド ページのいくつかのボタンはユーザーの設定に基づいて表示される必要があります。ユーザーが適切な権限を持っている場合、ユーザーが対応する権限を持っている場合、対応するボタンが表示されますが、ユーザーが対応する権限を持っていない場合、ボタンは非表示になります。これは基本的に必須の要件です。
この要件を見て、最初に v-if コマンドの使用を考える友人もいるかもしれません。このコマンドは実際に実行できます。ただし、ユーザーは通常複数のアクセス許可を持っている可能性があるため、ワイルドカードも存在する可能性があります。したがって、これは比較は簡単な作業ではないため、メソッドを作成する必要があります。 。 。したがって、1 つのコマンドを使用してこの機能を実装できれば、よりプロフェッショナルな外観になります。
とにかくやってみましょう。Vue3 で命令をカスタマイズする方法を見てみましょう。 (学習ビデオ共有: vue ビデオ チュートリアル)
1. 結果の表示
まず、カスタム命令の最終的な使用方法を見てみましょう。
<button>删除用户</button>
友人には、この v-hasPermission
がカスタム命令であることがわかります。現在のユーザーが user:delete
権限を持っている場合、このボタンが表示されます。ユーザーにこの権限がない場合、このボタンは表示されません。
2. 命令の基本
まず最初に、Vue2 と Vue3 のカスタム命令にはいくつかの違いがあり、完全に一致しているわけではないことを友人に伝えたいと思います。 . 以下Vue3の導入を中心に紹介します。
まず、私たちがどのようにやったかを友達と共有してから、コードを説明するときに、各パラメーターの意味について話しましょう。
2.1 2 つのスコープ
カスタム ディレクティブは、グローバル スコープまたはローカル スコープを定義できます。
正式な実装を開始する前に、カスタム命令には 2 つのスコープがあることを理解する必要があります。1 つはローカル カスタム命令、もう 1 つはグローバル カスタム命令です。ローカル カスタム命令は現在の .vue
ファイルでのみ使用できますが、グローバル カスタム命令はすべての .vue
ファイルで使用できます。
2.1.1 ローカル ディレクティブ
は、次のように現在の .vue ファイル内で直接定義できます。
directives: { focus: { // 指令的定义 mounted(el) { el.focus() } } }
ただし、Vue3 では、次のように記述できます:
<template> <p> <button>ClickMe</button> </p> </template> <script> import {ref} from 'vue'; export default { name: "MyVue01", setup() { const a = ref(1); const btnClick = () => { a.value++; } return {a, btnClick} }, directives: { onceClick: { mounted(el, binding, vnode) { el.addEventListener('click', () => { if (!el.disabled) { el.disabled = true; setTimeout(() => { el.disabled = false; }, binding.value || 1000); } }); } } } } </script>
ここでは、onceClick というコマンドをカスタマイズしました。このコマンドをボタン ボタンに追加した後、ボタン ボタンがクリックされてから無効になるまでの時間を設定できます。ユーザーが同じ状態を繰り返さないようにするには、状態をクリックします。
皆さん、この命令の実行ロジックは実際には非常に単純です。el は、この命令で要素を追加し、要素のクリック イベントを監視するのと同じです。要素がクリックされた場合、要素は次に、要素を無効に設定し、スケジュールされたタスクを指定し、有効期限が切れた後に要素を使用できるようにします。 Brother Song は、ここでの特定のパラメーターを以下で詳しく紹介します。
ただし、これはローカル ディレクティブにすぎず、現在の .vue ファイルでのみ使用できます。すべての .vue ファイルで使用できるようにグローバル ディレクティブを定義することもできます。
2.1.2 グローバル ディレクティブ
通常、次のようにグローバル ディレクティブを main.js に記述するか、別の js ファイルを作成して main.js に導入します。例は main.js に直接記述されています:
const app = createApp(App); app.directive('onceClick',{ mounted(el, binding, vnode) { el.addEventListener('click', () => { if (!el.disabled) { el.disabled = true; setTimeout(() => { el.disabled = false; }, binding.value || 1000); } }); } })
このようにして、いつでもどこでも v-onceClick
コマンドを使用できます。
命令をカスタマイズするときにマウントとパラメータについて混乱するかもしれませんが、Brother Song がこれらのメソッドとパラメータを詳しく紹介します。
2.2 7 つのフック関数
Vue3 では、カスタム命令のフック関数は主に次の 7 種類になります (Vue2 とは大きく異なります)。
- created: バインドされた要素の属性またはイベント リスナーが適用される前に呼び出されます。これは、通常の v-on イベント リスナーが呼び出される前に、ディレクティブをイベント リスナーに追加する必要がある場合に便利です。
- beforeMount: ディレクティブが初めて要素にバインドされるとき、親コンポーネントがマウントされる前に呼び出されます。
- mounted: バインドされた要素の親コンポーネントがマウントされた後に呼び出されます。ほとんどのカスタム命令はここに書かれています。
- beforeUpdate: コンポーネントを含む VNode を更新する前に呼び出されます。
- updated: 含まれているコンポーネントの VNode とそのサブコンポーネントの VNode が更新された後に呼び出されます。
- beforeUnmount: バインドされた要素の親コンポーネントをアンマウントする前に呼び出されます。
- unmounted: ディレクティブが要素からアンバインドされ、親コンポーネントがアンマウントされたときに 1 回だけ呼び出されます。
フック関数はたくさんあり、少し難しく感じるかもしれませんが、日常の開発で最も一般的に使用される関数は、実際にはマウントされた関数です。
2.3 四个参数
这里七个钩子函数,钩子函数中有回调参数,回调参数有四个,含义基本上和 Vue2 一致:
- el:指令所绑定的元素,可以用来直接操作 DOM,我们松哥说想实现一个可以自动判断组件显示还是隐藏的指令,那么就可以通过 el 对象来操作 DOM 节点,进而实现组件的隐藏。
-
binding:我们通过自定义指令传递的各种参数,主要存在于这个对象中,该对象属性较多,如下属性是我们日常开发使用较多的几个:
- name:指令名,不包括 v- 前缀。
- value:指令的绑定值,例如:
v-hasPermission="['user:delete']"
中,绑定值为'user:delete'
,不过需要小伙伴们注意的是,这个绑定值可以是数组也可以是普通对象,关键是看你具体绑定的是什么,在 2.1 小节的案例中,我们的 value 就是一个数字。 - expression:字符串形式的指令表达式。例如 v-my-directive="1 + 1" 中,表达式为 "1 + 1"。
- arg:传给指令的参数,可选。例如
v-hasPermission:[name]="'zhangsan'"
中,参数为 "name"。
- vnode:Vue 编译生成的虚拟节点。
- oldVnode:上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。
除了 el 之外,其它参数都应该是只读的,切勿进行修改。如果需要在钩子之间共享数据,建议通过元素的 dataset 来进行。
2.4 动态参数
有一种动态参数,这里也和小伙伴们分享下。正常情况下,我们自定义指令时传递的参数都是通过 binding.value 来获取到的,不过在这之外还有一种方式就是通过 binding.arg 获取参数。
我举一个简单例子,假设我们上面这个 onceClick 指令,默认的时间单位时毫秒,假设现在想给时间设置单位,那么我们就可以这样写:
const app = createApp(App); app.directive('onceClick',{ mounted(el, binding, vnode) { el.addEventListener('click', () => { if (!el.disabled) { el.disabled = true; let time = binding.value; if (binding.arg == "s") { time = time * 1000; } setTimeout(() => { el.disabled = false; }, time); } }); } })
在自定义指令的时候,获取到 binding.arg 的值,这样就可以知道时间单位了,在使用该指令的时候,方式如下:
<button>ClickMe</button> <script> import {ref} from 'vue'; export default { name: "MyVue01", setup() { const timeUnit = ref('s'); return {timeUnit} } } </script>
timeUnit 是一个提前定义好的变量。
3. 自定义权限指令
好啦,有了上面的基础知识,接下来就来看我们本文的主题,自定义权限指令,我写一个简单的例子大家来看下:
const usersPermissions = ['user']; app.directive('hasPermission', { mounted(el, binding, vnode) { const {value} = binding; let f = usersPermissions.some(p => { return p.indexOf(value) !== -1; }); if (!f) { el.parentNode && el.parentNode.removeChild(el); } } })
usersPermissions 表示当前用户所具备的权限,正常该数据应该是从服务端加载而来,但是我这里简单起见,就直接定义好了。
具体的逻辑很简单,先从 binding 中提取出 value 的值,这就是当前控件所需要的权限,然后遍历 usersPermissions 用一个 some 函数,去查看 usersPermissions 中是否有满足条件的值,如果没有,说明当前用户不具备展示该组件所需要的权限,那么就要隐藏这个组件,隐藏的方式就是获取到当前组件的父组件,然后从父组件中移除当前组件即可。
这是一个全局的指令,定义好之后,我们就可以在组件中直接使用了:
<button>删除用户</button>
好啦,Vue3 自定义组件学会了没?松哥在最近的 TienChin 项目视频中也会和大家分享这块的内容,敬请期待。
以上がVue3 で命令をカスタマイズするにはどうすればよいですか?コードの説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Vue.jsとReactにはそれぞれ独自の利点があり、選択はプロジェクトの要件とチームテクノロジースタックに基づいている必要があります。 1。Vue.jsはコミュニティに優しいものであり、豊富な学習リソースを提供しており、エコシステムには公式チームとコミュニティによってサポートされているVuerouterなどの公式ツールが含まれています。 2. Reactコミュニティは、強力なエコシステムを備えたエンタープライズアプリケーションに偏っており、Facebookとそのコミュニティが提供するサポートを頻繁に更新しています。

NetflixはReactを使用してユーザーエクスペリエンスを強化します。 1)Reactのコンポーネント機能は、Netflixが複雑なUIを管理可能なモジュールに分割するのに役立ちます。 2)Virtual DomはUIの更新を最適化し、パフォーマンスを向上させます。 3)ReduxとGraphQLを組み合わせて、Netflixはアプリケーションのステータスとデータフローを効率的に管理します。

Vue.jsはフロントエンドフレームワークであり、バックエンドフレームワークはサーバー側のロジックを処理するために使用されます。 1)VUE.JSは、ユーザーインターフェイスの構築に焦点を当て、コンポーネントおよびレスポンシブデータバインディングを介して開発を簡素化します。 2)ExpressやDjangoなどのバックエンドフレームワークは、HTTPリクエスト、データベース操作、ビジネスロジックを処理し、サーバーで実行します。

VUE.JSは、開発効率とユーザーエクスペリエンスを向上させるために、フロントエンドテクノロジースタックと密接に統合されています。 1)建設ツール:Webpackおよびロールアップと統合して、モジュール開発を実現します。 2)国家管理:VUEXと統合して、複雑なアプリケーションステータスを管理します。 3)ルーティング:Vuerouterと統合して、単一ページのアプリケーションルーティングを実現します。 4)CSSプリプロセッサ:SASSをサポートし、スタイル開発効率を改善するために少なくなります。

Netflixは、Reactのコンポーネント設計と仮想DOMメカニズムが複雑なインターフェイスと頻繁な更新を効率的に処理できるため、ユーザーインターフェイスを構築するためにReactを選択しました。 1)コンポーネントベースの設計により、Netflixはインターフェイスを管理可能なウィジェットに分解し、開発効率とコード保守性を向上させることができます。 2)仮想DOMメカニズムは、DOM操作を最小化することにより、Netflixユーザーインターフェイスの滑らかさと高性能を保証します。

Vue.jsは、使いやすく強力なため、開発者に愛されています。 1)そのレスポンシブデータバインディングシステムは、ビューを自動的に更新します。 2)コンポーネントシステムは、コードの再利用性と保守性を向上させます。 3)コンピューティングプロパティとリスナーは、コードの読みやすさとパフォーマンスを向上させます。 4)Vuedevtoolsの使用とコンソールエラーのチェックは、一般的なデバッグ手法です。 5)パフォーマンスの最適化には、主要な属性、計算された属性、およびキープアライブコンポーネントの使用が含まれます。 6)ベストプラクティスには、クリアコンポーネントの命名、単一ファイルコンポーネントの使用、ライフサイクルフックの合理的な使用が含まれます。

Vue.jsは、効率的で保守可能なフロントエンドアプリケーションを構築するのに適した進歩的なJavaScriptフレームワークです。その主な機能には、1。レスポンシブデータバインディング、2。コンポーネント開発、3。仮想DOM。これらの機能を通じて、VUE.JSは開発プロセスを簡素化し、アプリケーションのパフォーマンスと保守性を向上させ、最新のWeb開発で非常に人気を博しています。

Vue.jsとReactにはそれぞれ独自の利点と欠点があり、選択はプロジェクトの要件とチームの条件に依存します。 1)Vue.jsは、シンプルで使いやすいため、小さなプロジェクトや初心者に適しています。 2)Reactは、その豊富な生態系とコンポーネント設計のため、大規模なプロジェクトと複雑なUIに適しています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

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

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

ホットトピック









