Vueカスタムコンポーネントはイベント修飾子を使用してピットレコードを踏む

Vueカスタムコンポーネントはイベント修飾子を使用してピットレコードを踏む

序文

今日、自作のコンポーネントを使っていたところ、突然、長い間忘れていたバブリングイベントに遭遇しました。そこで、Vue 独自のイベント修飾子 (.stop) を使うことを考えました。これでバブリング問題は解決できると思ったのですが、この問題に遭遇しました。

ここに画像の説明を挿入

頭の中に疑問符がたくさん浮かんでいますか? ? ? ?これは一体何だ?Vueのドキュメントに従って書いたんだ(血を吐く)

そこで、私は問題解決の旅を始めました。

プログラマーのルーチン操作:

ブラウザを開いて、Baidu/Google で検索します。いろいろ出てきますが、どれも私の問題を解決できません。Vue のドキュメントを参照するしかありません! ! ! !
私はVueのドキュメントを少なくとも何十回も読んでいて、何も見逃していないと思っていました。Vueのドキュメントにはこの問題の答えがないと確信していました。一生懸命検索してここにたどり着きました

ここに画像の説明を挿入

えっと?このevent.stopPropagation()? ? ?

突然、あるアイデアが浮かびました! ! ! !

ここに画像の説明を挿入

event.stopPropagation() をトリガーできるため、イベントを渡すことができ、問題を解決できます。やるだけ! !

アマチュアコード修正を始める

ここに画像の説明を挿入

カスタム コンポーネントを次のように使用します。

ここに画像の説明を挿入

コンソール出力を見てみましょう

ここに画像の説明を挿入

それでおしまい! ! ! ! !しかし、なぜ2回出力されるのでしょうか? ? ? ?すぐに解けるだろうと思ったのですが、奇妙な好奇心が湧いてきました。

2度発生したバグを見つける旅を始めましょう

.once 修飾子を追加してみましたが、機能しませんでした。さらに数回クリックしたところ、2 回トリガーされていることがわかりました。

ここに画像の説明を挿入

とても奇妙ですね!これは一体何だ! ! ! !

Vueイベント修飾子.onceの使用を続行すると、次の出力が表示されました。

ここに画像の説明を挿入

確かに一度しかトリガーできませんが、なぜ最初は 2 回印刷されるのでしょうか? ! ! (かすかな)

問題は完全に解決されていません。引き続き調査してください。 。 。 。

印刷タイムスタンプ(timeStamp)を確認してください。それらはすべて同時にトリガーされますが、これは簡単ではありません。

ブラウザを使用して検索を続ける

ひらめきがありました。setTimeout を使用して、強制的に 1 回だけトリガーするのはどうでしょうか?

コード変換を開始する

ここに画像の説明を挿入

さて、効果を見てみましょう

ここに画像の説明を挿入

成功! ! ! !途中で起こったすべての困難は解決されました! ! !

要約する

これで、イベント修飾子を使用した Vue カスタム コンポーネントに関するこの記事は終了です。イベント修飾子を使用した Vue に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue5 のイベント修飾子 (スタイル) とテンプレート
  • Vueのイベント処理とイベント修飾子の詳細な説明
  • Vue ダブルクリックイベント 2.0 イベント監視 (クリック-ダブルクリック-マウスイベント) とイベント修飾子の操作
  • Vue イベント修飾子のネイティブとセルフの例の詳細な説明
  • Vue フレームワークのキーボード イベント、キー値修飾子、双方向データ バインディング
  • Vue.js イベント修飾子の使用に関するチュートリアル
  • Vue のイベント修飾子: once、prevent、stop、capture、self、passive

<<:  MySQL データベースを手動および自動でバックアップする 8 つの方法

>>:  Dockerでイメージをプルするための手順を完了する

推薦する

nginx を使用して 1 つのドメイン名で複数の Laravel プロジェクトを構成する方法の例

背景会社のサブプロジェクトが増えるにつれて、さまざまなサイズのプロジェクトが10個以上になります(バ...

Vue Element フロントエンドアプリケーション開発の動的メニューとルーティングの関連付け処理

目次概要1. メニューとルーティング処理2. メニューとルートリスト3. ログインプロセスの処理概要...

MySQL がテーブルを読み取れないエラー (MySQL 1018 エラー) の解決方法

1. エラーの再現MySQL データベースにはアクセスできますが、データベース テーブルを読み取るこ...

MySQL 8で追加された3つの新しいインデックスは、非表示、降順、関数です。

目次MySQL 8 の隠しインデックス、降順インデックス、関数インデックス1. 隠しインデックス1....

Docker を使用して Nginx+Flask+Mongo アプリケーションをデプロイする

サーバーにはNginx、データベースサポートにはMongo、Python言語のWebフレームワークに...

Linux での感嘆符コマンド (!) の使用の概要

序文最近、弊社では mbp の設定をしており、ssh を使うことが多くなりました。複雑なコマンドを書...

Vue echarts は水平棒グラフを実現します

この記事では、水平棒グラフを実現するためのvue echartsの具体的なコードを参考までに共有しま...

スライダーを作成するためのネイティブ js ドラッグ アンド ドロップ機能のサンプル コード

ドラッグ アンド ドロップはフロントエンドでよく使われる機能であり、多くのエフェクトで js のドラ...

TypeScriptの列挙型を詳しく説明する

目次1. デジタル列挙2. 文字列の列挙3. 逆マッピング4. 異種列挙5. 定数列挙6. 列挙メン...

dockerがredisを再起動するとmysqlデータが失われる問題を解決する

公式ドキュメント:したがって、mysql は次のように起動する必要があります。 docker run...

Navicat の MySQL へのリモート接続が遅い理由の詳細な説明

最終的な解決策は最後の写真にありますリモート データベース ( Linux システム) に接続したと...

Dockerコアとインストールの具体的な使い方

1. Docker とは何ですか? (1)DockerはLinuxコンテナ内でアプリケーションを実行...

Vueカスタムディレクティブを使用してドラッグアンドドロッププラグインを構築する方法

HTML5 のドラッグ アンド ドロップ機能は誰もが知っていますが、これを使用するとドラッグ アンド...

Vue2.0の双方向データバインディング原則を手動で実装する

一言で言えば: データハイジャック (Object.defineProperty) + パブリッシュ...

今日、私は非常に奇妙なクリックの問題に遭遇し、自分で解決しました

...こんな感じで、今日はポップアップウィンドウを作ろうと思ったのですが、バックエンド PHP によ...