ホームページ > ウェブフロントエンド > Vue.js > Vue コンポーネントのカスタム イベントとグローバル イベント バスを簡単に分析した記事

Vue コンポーネントのカスタム イベントとグローバル イベント バスを簡単に分析した記事

青灯夜游
リリース: 2023-01-30 20:19:50
転載
2352 人が閲覧しました

この記事では、Vue コンポーネントについて紹介し、Vue コンポーネントのカスタム イベントとグローバル イベント バスについて説明します。お役に立てば幸いです。

Vue コンポーネントのカスタム イベントとグローバル イベント バスを簡単に分析した記事

#1. カスタム イベント

1. カスタム イベントとは

Customイベントはコンポーネント間の通信方法であり、子コンポーネントに適用できます -> 親コンポーネントはデータを送信します。

2. 使用場所

App が親コンポーネントで School が子コンポーネントで、School が App にデータを転送したい場合、App でカスタム イベントを School にバインドする必要があります (イベントのコールバックは App 内にあります)。 , 親コンポーネント サブコンポーネントを使用するには、事前に自己定義イベントをバインドしておく必要があります。これにより、父と息子の間のデータ通信が完了します。

リトル A のお父さんが町で働いているようなものです。 , そして、リトル A は父親がいなくて寂しい、そしてその後どうなったのでしょうか? 彼の父親は、事前にリトル A に電話をかけ、もし私に会いたくなったらこの電話をかけるようにとリトル A に言いました。そうすれば、リトル A は電話をかけた後、父親と通信できるようになりました。は親コンポーネントのカスタム イベントであるため、データを親コンポーネントに渡すことができます。

3. カスタム イベントをバインドします。

3.1 最初の方法: または

の親コンポーネント内Vue コンポーネントのカスタム イベントとグローバル イベント バスを簡単に分析した記事#3.2 親コンポーネント内の 2 番目のメソッド:mounted(){this . $refs. xxx. $on('shanyu' ,this. test)}

Vue コンポーネントのカスタム イベントとグローバル イベント バスを簡単に分析した記事

カスタム イベント内にネイティブ イベントを記述すると、デフォルトでカスタム イベントになるため、この問題を解決するために @xxx.native を使用します [関連する推奨事項:
vuejs ビデオ チュートリアル

Web フロントエンド開発]

最初に、親コンポーネントにカスタム コンポーネントを記述します (カスタム イベントをトリガーしたい場合)一度のみ、once 修飾子または $once メソッドを使用できます)
      // 在父组件内自定义个事件
    getMyStudent(name) {
      console.log("App收到学校名:", name);
      this.studentName = name;
    }
  },
  mounted() {
    this.$refs.student.$on("shanyu", this.getMyStudent);
  }
ログイン後にコピー

サブコンポーネントを見つけて、Student コンポーネント インスタンスで shanyu イベントをトリガーします

Vue コンポーネントのカスタム イベントとグローバル イベント バスを簡単に分析した記事Triggerカスタム イベント: this. $emit('shanyu',data)

    methods: {
        sendStudentName(){
            //触发Student组件实例身上的shanyu事件
            this.$emit('shanyu',this.name)
        }
    }
ログイン後にコピー

4. カスタム イベントのバインド解除

    unbind(){
        this.$off('shanyu')// 只适用于解绑1个事件
        this.$off(['shanyu','demo'])// 适用于解绑多个
        this.$off()// 适用于解绑全部
    }
ログイン後にコピー
注: これを渡します. $refs. xxx. $on('shanyu', callback) がカスタム イベントをバインドする場合、コールバックはメソッドで設定するか、アロー関数を使用する必要があります。そうしないと、このポインティングに問題が発生し、Vue がエラーを報告することになります

2. グローバル イベント バス

1. グローバル イベント バスとは##A メソッドコンポーネント間の通信に適しており、コンポーネント間のあらゆる通信に適しています。カスタム イベントと同様に、カスタム イベントをはるかに超えて、兄弟間のコミュニケーションを実現できます

#2. 使用方法

ここでの主な点は次のとおりです。 main.js と 2 つの兄弟コンポーネントの 3 つのファイルが含まれます。まず、vm のファイルである main.js を見つけて、vue インスタンスにグローバル イベント バスをインストールします。では、なぜ beforeCreate フックに配置する必要があるのでしょうか? beforeCreate ステートメントのサイクルフックの特徴は、データが更新される前に実行されることです。$bus は現在のアプリケーションの vm です。バスはバスだけでなく、バ​​スという意味もあります。

new Vue({
  el: "#app",
  render: h => h(App),
  // 使用beforCreate这生命周期钩子来进行兄弟间的通信
  beforeCreate() {
    Vue.prototype.$bus = this // 安装全局事件总线
  }
})
ログイン後にコピー

3. イベント バスの使用

##1. データの受信

##コンポーネント A がデータを受信したい場合は、カスタム イベントを $ にバインドします。コンポーネント A 内のバスの場合、イベント コールバックは A コンポーネント自体に残ります。 Methods(){mounted() {this . $bus . $on( 'xxxx' ,this .demo)}

<script>
export default {
  name: "School",
  data() {
    return {
      name: "山鱼特效屋",
      address: "南京北城区"
    };
  },
  mounted() {
    this.$bus.$on(&#39;shanyu&#39;, (data) => {
      console.log("我是School组件,我收到了数据", data);
    });
  },
  //使用完之后销毁该绑定事件避免后期错误使用
  beforeDestroy() {
    this.$bus.$off("hello")
  },
}
</script>
ログイン後にコピー
2. データ

this を提供します。 $bus.$emit('xxxx', transfer data)

<template>
  <div class="demo">
    <h2>学生姓名:{{name}}</h2>
    <h2>学生性别:{{sex}}</h2>
    <button @click="snedStudentName">点击将数据给兄弟School</button>
  </div>
</template>

<script>
export default {
  name: "Student",
  data() {
    return {
      name: "张三",
      sex: "男"
    };
  },
  // 配置一个methods项
  methods: {
      snedStudentName(){
      // 选择给谁提供数据
          this.$bus.$emit(&#39;shanyu&#39;,this.name)
      }
  },
}
</script>
ログイン後にコピー
注: 現在のコンポーネントで使用されているイベントのバインドを解除するには、beforeDestroy フックで $off を使用することをお勧めします。 (学習ビデオ共有:

vuejs 入門チュートリアル

基本プログラミング ビデオ

)

以上がVue コンポーネントのカスタム イベントとグローバル イベント バスを簡単に分析した記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート