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でイメージをプルするための手順を完了する

推薦する

Mysql 5.7.17 をインストールした後、MySQL にログインするチュートリアル

mysql-5.7.17 のインストールについては記事の下部で紹介されているので、参考にしてください...

WeChatアプレット+EChartsで動的更新プロセス記録を実現

序文最近、小さなプログラムでリアルタイムにチャートを更新するという要件に遭遇しました。最初は wx-...

組み込み移植 docker エラー問題 (概要)

長い移植と情報検索の期間を経て、組み込みDockerの問題を解決することができました。インターネット...

Nginx転送マッチングルールの実装

1. 正規表現マッチング大文字と小文字を区別するマッチングの場合 ~ ~*は大文字と小文字を区別しな...

Vueでlessを使用する問題を解決する

1. less依存関係をインストールします: npm install less less-loade...

DockerにMySQLをインストールする方法

最近 Django を導入しましたが、MySQL を手動でインストールしたくなかったので、Docke...

MySQL 5.7 でパスワードを変更するときに発生する ERROR 1054 (42S22) の解決方法

MySQL 5.7 を新しくインストールしました。ログインすると、パスワードが間違っているというメッ...

Javascript デザインパターン プロトタイプ モードの詳細

目次1. プロトタイプモード例1例2例3 2. オブザーバーパターン1. プロトタイプモードプロトタ...

Zabbix は MySQL インスタンス メソッドを監視します

1. 監視計画監視項目を作成する前に、何を監視するのか、どのように監視するのか、監視データをどのよう...

MYSQL開発パフォーマンス調査:バッチデータ挿入の最適化方法

1. どのような問題に直面しましたか?標準 SQL では、通常、次の SQL 挿入ステートメントを記...

JavaScript 日付ツールの概要

ユーティリティ = { /** * 死亡年ですか? * @return {Boolse} true...

HTML <!--...--> コメントタグの役割の詳細な分析

多くのウェブサイトのソースコードを確認すると、多くのコメントが見つかります。特に、ソース文書にコメン...

CSSインジェクションの知識の要約

最近のブラウザでは、CSS 内で JavaScript を実行することはできなくなりました。以前は、...

Linux サーバーのクイックアンインストールとノード環境のインストール (簡単に始められます)

1.まずnpmをアンインストールする sudo npm アンインストール npm -g 2. ノー...

Web プロジェクト開発 VUE の混合と継承の原則

目次ミキシンMixin ノート (重複名)ローカルミックスイングローバル ミックスイン定義とグローバ...