Vue.js ディレクティブのカスタム命令の詳細な説明

Vue.js ディレクティブのカスタム命令の詳細な説明

デモコマンドをカスタマイズする

Vue カスタム ディレクティブの構文は次のとおりです。

Vue.directive(id, 定義)

渡される 2 つのパラメータ、id は命令 ID を参照し、definition は定義オブジェクトを参照します。その中で、定義オブジェクトはいくつかのフック関数を提供できます。

<div id="アプリ">
	<!-- 入力ボックスにフォーカスが当たります-->
	<input type="text" v-focus/>
</div>

<スクリプト>
	// グローバルカスタムディレクティブ v-focus を登録する
	Vue.directive("フォーカス", {
		// バインドされた要素が DOM に挿入されるとき。
		挿入(el, バインディング) {
			// 要素にフォーカス el.focus();
		}
	})
</スクリプト>
<div id="アプリ">
    <p v-demo:red="msg">{{msg}}</p>
</div>

<スクリプト>
	// グローバルディレクティブ Vue.directive('demo', function (el, binding) {
        console.log(el) //p タグ console.log(binding) //出力はオブジェクト obj です
        console.log('コマンド名:'+binding.name) //コマンド名console.log('コマンドバインディング値:'+binding.value) //コマンドバインディング値console.log('バインディング値の文字列形式:'+binding.expression) //バインディング値の文字列形式console.log('コマンドに渡されたパラメーター:'+binding.arg) //コマンドに渡されたパラメーター})
    var vm = 新しい Vue({
        el: "#app",
        データ: {
            メッセージ: 'こんにちは!'
        },
        // ローカルディレクティブ:{
			デモ:{
				挿入: 関数 (el) {
					コンソール.log(el)
				}      
			}
		}
    })
</スクリプト>

ここに写真の説明を記入してください

オブジェクトリテラル

<div id="アプリ">
    <p v-demo="colours">{{colours.text}}</p>
</div>

<スクリプト>
    Vue.directive('demo', 関数(el, バインディング) {
        console.log(el) // pタグ console.log(binding) // 出力はオブジェクトobjです
        console.log(binding.value) // {color: 'blue',text: 'hello!'}
        console.log(binding.value.color) // '青'
        console.log(binding.value.text) // 'hello!'
        el.style = 'color:' + binding.value.color  
    })
    var vm = 新しい Vue({
        el: "#app",
        データ: {
            色:
                色: '青'、
                テキスト: 'こんにちは!'
            }
        }
    })
</スクリプト>

ライフサイクルフック

ディレクティブ定義関数は、いくつかのフック関数を提供します (オプション)。

  1. bind : ディレクティブが最初に要素にバインドされるときに 1 回だけ呼び出されます。このフック関数は、バインド中に 1 回実行される初期化アクションを定義するために使用できます。
  2. inserted : バインドされた要素が親ノード ( div#app ) に挿入されたときに呼び出されます (親ノードが存在する場合に呼び出すことができますが、必ずしもドキュメント内にあるとは限りません)。
  3. update : 命令にバインドされた要素 (VNode 仮想ノード) の状態が変更されたときにトリガーされます (スタイル、コンテンツ、Vue データなどを含む)
  4. componentUpdated : 命令が配置されているコンポーネントの VNode とその子 VNode がすべて更新された後に呼び出されます。
  5. unbind : ディレクティブが要素からアンバインドされたとき (要素が DOM から削除されたとき) に 1 回だけ呼び出されます。
<div id="アプリ">
    <p v-demo="color">{{num}}</p>
    <button @click="add">追加</button>
    <button onclick='unbind()'>バインド解除</button>
</div>

<スクリプト>
    関数アンバインド() {
        vm.$destroy(); //バインドを解除する別のメソッドを開始します}
    Vue.directive('demo', { // ディレクティブを登録するための 5 つのフック関数 bind: function () { //1. バインドする // バインドの準備をします。たとえば、イベント リスナーや、一度だけ実行する必要があるその他の複雑な操作を追加します console.log('1 - bind');
        },
        挿入: function () { //2. ノードにバインド console.log('2 - 挿入');
        },
        update: function () { //3. コンポーネントの更新 // 取得した新しい値に基づいて対応する更新を実行します。初期値の場合、console.log('3 - update'); も 1 回呼び出されます。
        },
        componentUpdated: function () { //4. コンポーネントの更新が完了しました console.log('4 - componentUpdated');
        },
        unbind: function () { //5. Unbind//クリーンアップ操作を実行します。たとえば、bind によってバインドされたイベント リスナーを削除する場合は、console.log('5 - bind');
        }
    })
    var vm = 新しい Vue({
        el: "#app",
        データ: {
            番号: 10,
            色: 「赤」
        },
        メソッド: {
            追加: 関数 () {
                this.num++;
            }
        }
    })
</スクリプト>

トリガー メソッド 1 と 2 を初期化し、[追加] ボタンをクリックしてメソッド 3 と 4 をトリガーし、[バインド解除] ボタンをクリックしてメソッド 5 をトリガーします (以下を参照)。

ここに写真の説明を記入してください

Vue.js ディレクティブのカスタム命令の詳細な説明に関するこの記事はこれで終わりです。より関連性の高い Vue.js ディレクティブのカスタム命令については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue.js ソースコード解析のカスタム手順の詳細な説明
  • Vue.jsカスタム手順の学習と使用の詳細な説明
  • Vue.js でカスタム ドロップダウン メニューの指示を実装する方法について簡単に説明します。
  • Vue.js コンポーネントの再利用性ミックスインメソッドとカスタムディレクティブの詳細な説明
  • vue.js 内部カスタム命令とグローバルカスタム命令の詳細な実装 (using ディレクティブ)
  • Vue.jsカスタム命令の基本的な使用方法の詳細

<<:  Dockerがプライベート倉庫Harborを構築する手順

>>:  mysql MDLメタデータロックの詳細な分析

推薦する

Vueはシンプルな計算機能を実装します

この記事では、参考までに、簡単な計算機機能を実現するためのVueの具体的なコードを紹介します。具体的...

MySQLデータベースの管理者パスワードを忘れた場合の解決策

1. コマンド mysqld --skip-grant-tables を入力します (前提条件: m...

MySQL 8.0 WITH クエリの詳細

目次MySQL 8 の WITH クエリについて学ぶ1. 例3. 練習するMySQL 8 の WIT...

Centos7でのMySQLインストールチュートリアル

MySQLインストールチュートリアル、参考までに具体的な内容は次のとおりです。 1. ダウンロードY...

XHTML 入門チュートリアル: XHTML ハイパーリンク

ハイパーリンクはインターネット全体を接続していると言っても過言ではありません。ハイパーリンクは、別の...

HTML CSS3は画像表示効果を引き伸ばさない

1. transform 属性を使用して、画像を拡大せずに表示します (パスの問題は必要に応じて修正...

Centos 7.4 サーバーの時刻同期設定方法 [NTP サービスに基づく]

この記事では、CentOS 7.4 サーバーで時刻同期を構成する方法について説明します。ご参考までに...

MySQL 8.0.23 メジャーアップデート (新機能)

著者: Guan Changlong は、Aikesheng の配送サービス部門の DBA です。主...

Pythonで書かれたWebアプリケーションをDockerでデプロイする実践

目次1. Dockerをインストールする2. コードを書く3. Dockerfileを書く4. 画像...

Debian Dockerコンテナにcrontabスケジュールタスクを追加する

現在、DockerイメージのほとんどはDebianベースです # cat /etc/issue De...

Nginx でファイル ホットリンク保護サービスを構築する方法を学ぶ例

序文多くのサイトが、ポイントやゴールドコインなど、情報のダウンロードに料金を請求していることは誰もが...

MySQL 文字列分割の例 (区切り文字なしの文字列抽出)

区切り文字なしの文字列抽出質問の要件データベース内のフィールド値:実装効果: 1行のデータを複数行に...

Docker 実行オプションを使用して Dockerfile の設定を上書きする

通常は、最初に Dockerfile ファイルを定義し、次に docker build コマンドを使...

要素 ui の el-table の列にさまざまなスタイルのデータを動的に実装する例

問題の説明Ele.me UI のフレームワークでは、入力データは el-form であり、出力データ...

Reactの新バージョンのライフサイクルフック機能と使用方法の詳細な説明

旧ライフサイクルと比較して 3つのフックが廃止され、2つの新しいフックが追加されましたReact16...