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

推薦する

Linux カーネル デバイス ドライバー カーネル デバッグ テクニカル ノート集

/****************** * カーネルデバッグ技術 ****************...

Docker での Redis の永続ストレージの詳細な説明

この章では、dockerの下にあるSpring BootプロジェクトでRedisを操作し始めます。準...

docker に openjdk をインストールして jar パッケージを実行する方法

画像をダウンロード docker プル openjdkデータボリュームの作成java_appデータボ...

MySQL PHP 構文の簡単な分析

まずcharAt関数の基本的な構文を見てみましょう文字 = str.charAt(インデックス) c...

Tomcat を使用して IntelliJ IDEA によってデプロイされたプロジェクトの場所はどこですか?

IntelliJ IDEA が Tomcat を使用して Javaweb プロジェクトをデプロイし...

SQL 最適化チュートリアル: IN クエリと RANGE クエリ

序文「High Performance MySQL」では、インデックスでは範囲フィールドの後の部分が...

Vue カプセル化 TabBar コンポーネントの完全なステップ記録

目次実装のアイデア:ステップ 1: TabBar と TabBarItem のコンポーネント カプセ...

LinuxでのMySQLのインストール手順

1. mysql tar ファイルをダウンロードします。参考: 2. インストールパッケージがあるデ...

vue シンプルメモ帳開発の詳しい説明

この記事では、参考までにEasy Notepadを実装するためのVueの具体的なコードを紹介します。...

CentOS 7 での Docker プロキシの設定 (Linux での Systemd サービスの環境変数設定)

Docker デーモンは、 HTTP_PROXY 、 HTTPS_PROXY 、およびNO_PRO...

IDEA 構成の Tomcat 起動エラーの問題を解決する

異なるサーブレット パスを構成するときに、次の 2 つのエラーが発生しました。 java.lang....

Spring Boot Docker パッケージング ツールの概要

目次スプリングブートDocker spring-boot-maven-プラグインSpotify Ma...

MySQL 5.7.20 Green Edition のインストールの詳細なグラフィックチュートリアル

まず、MySQL とは何かを理解しましょう。 MySQL は、スウェーデンの会社 MySQL AB ...

HTML DOM入門_PowerNode Javaアカデミー

DOMとは何ですか? JavaScript を使用すると、HTML ドキュメント全体を再構築できます...

Docker を使用して開発環境を構築する方法 (Windows および Mac)

目次1. Dockerを使用する利点2. Dockerをインストールする1) LinuxにDocke...