ホームページ ウェブフロントエンド Vue.js vue.jsでのイベントの扱い方を詳しく解説

vue.jsでのイベントの扱い方を詳しく解説

Oct 27, 2020 pm 05:52 PM
vue.js イベントを処理する

次のvue.jsチュートリアルでは、vue.jsを使用してイベントを処理する方法を紹介します。

vue.jsでのイベントの扱い方を詳しく解説

Vue を使用して動的な Web サイトを構築する場合、イベントに応答することが必要になる可能性が高くなります。

たとえば、ユーザーがボタンをクリックしたり、フォームを送信したり、あるいは単にマウスを動かしたりした場合に、Vue Web サイトが特定の方法で応答するようにしたい場合があります。

Vue を使用したイベントの処理

v-on ディレクティブを関連する DOM 要素に追加することで、イベントをインターセプトできます。 。ボタン要素のクリックを処理したいとします。以下を Vue テンプレートに追加できます:

<button v-on:click="clickHandler"></button>
ログイン後にコピー

ディレクティブにパラメータ v-onparameter を追加したことに注意してください。は、処理するイベントの名前になります (この場合はクリック)。

次に、式をディレクティブにバインドします。ディレクティブは、通常、イベントを処理するために使用するメソッドです。この場合、これを clickHandler と呼びます。

ヒント: v-on ディレクティブには便利な短縮形 @ があり、v-on::<button @click="clickHandler">< の代わりに使用できます。 /ボタン>

#処理できるイベント タイプ

クリック以外に処理できるものDOM イベントを処理できるか?

Vue は、次のようなあらゆる種類の Web またはモバイル ネイティブ イベント (後で説明するカスタム イベントも同様) を処理できます。

  • submit

  • keyup

  • drag

  • scroll

最も一般的な

DOM イベントのリスト

イベント処理メソッド

メソッドをイベント処理ディレクティブにバインドすると、Run できるようになります。いくつかのカスタムコード。

この例では、単純にしてコンソールにメッセージを記録するだけですが、別の要素の表示/非表示、カウンタの増加など、さらに興味深いことを実行することもできます。

<div id="app">
  <button v-on:click="clickHanlder"></button>
</div>
ログイン後にコピー
new Vue({
  el: "#app",
  methods: {
    clickHandler () {
      console.log("You clicked the button!");
    }
  }
})
ログイン後にコピー

イベント オブジェクト

イベント オブジェクトはイベント ハンドラーに渡され、イベントへの応答方法の可能性がさらに広がります。このオブジェクトには、イベントの発生元の要素への参照 (event.target)、イベントの発生時刻 (event.timeStamp) など、多くの便利なプロパティとメソッドが含まれています。

clickHandler (event) {
  console.log(`The button was clicked at ${event.timeStamp}.`);
}
ログイン後にコピー

このオブジェクトは Vue ではなくネイティブ Web API によって提供されるため、純粋な JavaScript で見つかるオブジェクトと同じになることに注意してください。便宜上、

イベント インターフェイスのリファレンスを以下に示します。

イベント修飾子

JavaScript アプリケーションの一般的なパターンは、ネイティブ機能を使用せずにフォームの送信を手動で処理することです。これを行うには、フォーム処理コードを実行する前に、Submit イベントのPreventDefault ネイティブ メソッドを使用する必要があります。そうしないと、ページが完了する前にリダイレクトされてしまいます。

formHandler (event) {
  event.preventDefault();
  // form handling logic
}
ログイン後にコピー

Vue は、これをハンドラーで手動で行うのではなく、テンプレートから直接行うためのイベント修飾子を提供します。修飾子はディレクティブの後に「.」が追加されることに注意してください:

<form @submit.prevent="formHandler"></form>
ログイン後にコピー

Vue は、一般的なイベント処理シナリオで役立ついくつかの異なるイベント修飾子を提供します:

  • .stop

  • .prevent

  • .capture

  • #.self
  • #.once
  • .passive

カスタム イベント ## #これまで、ネイティブ イベントを処理する方法について説明してきました。しかし、Vue はコンポーネントベースのフレームワークなので、コンポーネントに独自のイベントを発行させることはできるでしょうか?

はい、これは非常に便利です。子コンポーネントから親コンポーネントにデータを送信したいとします。小道具データは親から子にのみ渡され、それ以外の場合には渡されないため、ここでは小道具を使用できません。

ParentComponent
 |
 | (data travels down via props, never up)  
 v 
ChildComponent
ログイン後にコピー

解決策は、子コンポーネントにイベントを発行させ、親コ​​ンポーネントにイベントをリッスンさせることです。

これを行うには、イベントを発行するときに子コンポーネントから this.$emit("my-event") を呼び出します。たとえば、閉じられたことを親 MainPage に通知する必要があるコンポーネント DialogComponent があるとします。

export default {
  methods: {
    onClose() {
      this.$emit("dialog-closed");
    }
  }
};
ログイン後にコピー

これにより、親コンポーネントはローカル イベントとまったく同じようにカスタム イベントを処理できるようになります。

<div>
  <dialog-component @dialog-closed="eventHandler" />
</div>
ログイン後にコピー

カスタム イベントでデータを送信することもでき、そのデータは処理メソッドを通じて受信できます。

onClose() {
  this.$emit("dialog-closed", { time: Date.now() });
}
ログイン後にコピー
eventHandler (event, { time }) {
  console.log(`Dialog was closed at ${time}`);
}
ログイン後にコピー

ヒント: カスタム イベントにはケバブケース名を使用してください。 HTML では大文字と小文字が区別されないため、myEvent などのキャメルケースのイベント名は、myevent がテンプレート内にあるため混乱を招く可能性があります。したがって、混乱を避けるために kebab-case my-event を使用することをお勧めします。

活动巴士

如上所述,子组件可以将事件发送到父组件。但是,如果您希望组件将事件发送到层次结构中的任何其他组件怎么办?例如,同级,祖父母等。

为此,我们可以使用一种称为事件总线的模式。在这里,我们创建了一个单独的Vue实例,以将事件传输到导入该事件的任何组件。

首先,在新的模块文件中创建并导出Vue实例:

import Vue from "vue";
export default new Vue();
ログイン後にコピー

接下来,将总线导入到您要发出事件的组件中。您可以使用$emit总线Vue实例的方法。

import eventBus from "./eventBus";

export default {
  ...
  methods: {
    myMethod () {
      eventBus.$emit("my-event")
    }
  }
}
ログイン後にコピー

最后,将总线导入到您想听事件的组件中。然后,您应该在代码中的某个位置设置侦听器。我建议您使用生命周期挂钩,就像created您可以在此处访问组件实例一样。

这是通过$on总线方法完成的,该方法带有两个参数-您要监听的事件和一个回调。

import eventBus from "./eventBus";

export default {
  ...
  created () {
    eventBus.$on("my-event", () => {
      console.log("my-event called on global event bus");
    });
  }
}
ログイン後にコピー

相关推荐:

2020年前端vue面试题大汇总(附答案)

vue教程推荐:2020最新的5个vue.js视频教程精选

更多编程相关知识,请访问:编程入门!!

以上がvue.jsでのイベントの扱い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

vite が .env ファイルを解析する方法についての詳細な説明 vite が .env ファイルを解析する方法についての詳細な説明 Jan 24, 2023 am 05:30 AM

Vue フレームワークを使用してフロントエンド プロジェクトを開発する場合、デプロイ時に複数の環境をデプロイすることになりますが、開発環境、テスト環境、オンライン環境で呼び出されるインターフェイス ドメイン名が異なることがよくあります。どうすれば区別できるでしょうか?それは環境変数とパターンを使用することです。

Ace コード エディターを Vue プロジェクトに統合する方法の詳細な図による説明 Ace コード エディターを Vue プロジェクトに統合する方法の詳細な図による説明 Apr 24, 2023 am 10:52 AM

Ace は、JavaScript で書かれた埋め込み可能なコード エディターです。 Sublime、Vim、TextMate などのネイティブ エディターの機能とパフォーマンスに匹敵します。あらゆる Web ページや JavaScript アプリケーションに簡単に埋め込むことができます。 Ace は Cloud9 IDE のメイン エディタとして維持されており、Mozilla Skywriter (Bespin) プロジェクトの後継です。

vue のコンポーネント化とモジュール化の違いは何ですか vue のコンポーネント化とモジュール化の違いは何ですか Dec 15, 2022 pm 12:54 PM

コンポーネント化とモジュール化の違い: モジュール化はコード ロジックの観点から分割され、コードの階層化された開発が容易になり、各機能モジュールの機能の一貫性が保証されます。コンポーネント化は UI インターフェイスの観点から計画され、フロントエンドのコンポーネント化により UI コンポーネントの再利用が容易になります。

Vue3 で単体テストを作成する方法を調べる Vue3 で単体テストを作成する方法を調べる Apr 25, 2023 pm 07:41 PM

Vue.js は、今日のフロントエンド開発において非常に人気のあるフレームワークとなっています。 Vue.js が進化し続けるにつれて、単体テストの重要性がますます高まっています。今日は、Vue.js 3 で単体テストを作成する方法を検討し、いくつかのベスト プラクティスと一般的な問題と解決策を提供します。

vue3 の reactive() について詳しく話しましょう vue3 の reactive() について詳しく話しましょう Jan 06, 2023 pm 09:21 PM

前書き: vue3 の開発では、reactive は応答性の高いデータを実装するメソッドを提供します。これは日常の開発で頻繁に使用される API です。この記事では、著者はその内部動作メカニズムを探ります。

JSX 構文と Vue のテンプレート構文の簡単な比較 (利点と欠点の分析) JSX 構文と Vue のテンプレート構文の簡単な比較 (利点と欠点の分析) Mar 23, 2023 pm 07:53 PM

Vue.js では、開発者は、JSX 構文とテンプレート構文という 2 つの異なる構文を使用してユーザー インターフェイスを作成できます。どちらの構文にもそれぞれ長所と短所があるので、それらの違い、長所と短所について説明します。

Vue3 動的コンポーネントで例外を処理する方法の簡単な分析 Vue3 動的コンポーネントで例外を処理する方法の簡単な分析 Dec 02, 2022 pm 09:11 PM

Vue3 動的コンポーネントで例外を処理するにはどうすればよいですか?次の記事では、Vue3 の動的コンポーネントの例外処理方法について説明します。

現在の Vue バージョンをクエリする方法 現在の Vue バージョンをクエリする方法 Dec 19, 2022 pm 04:55 PM

現在の Vue バージョンを照会するには 2 つの方法があります: 1. cmd コンソールで、「npm list vue」コマンドを実行してバージョンを照会します。出力結果は Vue のバージョン番号情報です。2. パッケージを見つけて開きます。プロジェクト内のjsonファイルを検索して「依存関係」の項目でvueのバージョン情報が確認できます。

See all articles