suchen
HeimWeb-FrontendView.jsSo verwenden Sie Ereignisemitter, um Komponentendaten in Vue.js zu ändern

So verwenden Sie Ereignisemitter, um Komponentendaten in Vue.js zu ändern

In diesem Artikel erfahren Sie, wie Sie Ereignisemitter verwenden, um Daten und deren Status von untergeordneten Komponenten an die übergeordnete Komponente in vue.js zu übergeben. Dieser Artikel ist für Entwickler aller Stufen geeignet, auch für Anfänger.

Bevor Sie beginnen…

Wir können uns die Methode zum Übergeben von Daten von der übergeordneten Komponente an die untergeordnete Komponente in Vue.js im Artikel „Übergeben von Daten an untergeordnete Komponenten mithilfe von Requisiten in Vue.js“ ansehen. Bevor Sie diesen Artikel lesen, sollten Sie Folgendes installiert haben:

node.js 10.x und höher. Sie können überprüfen, ob Sie dies tun, indem Sie den folgenden Befehl im Terminal/in der Eingabeaufforderung ausführen:

node -v

    Code-Editor – Empfehlen Sie die neueste Version von Visual Studio
  • Vue, global auf Ihrem Computer installiert
  • Vue CLI 3.0 ist auf Ihrem Computer installiert. Deinstallieren Sie dazu zunächst die alte CLI-Version:
  • npm uninstall -g vue-cli
  • Dann installieren Sie eine neue:
npm install -g @vue/cli

    Laden Sie hier ein
  • Vue-Starterprojekt herunter

  • Entpacken Sie das heruntergeladene Projekt
  • Navigieren Sie zu Öffnen Sie die entpackte Datei und führen Sie den folgenden Befehl aus, um alle Abhängigkeiten auf dem neuesten Stand zu halten:
  • npm install

Übergeben Sie Daten durch die Komponente. Um den Datenwert von der übergeordneten Komponente in die Anwendungskomponente zu übergeben (z. B app.vue) an untergeordnete Komponenten (z. B. verschachtelte Komponenten) übergeben wird, stellt uns Vue.js eine Plattform namens props zur Verfügung.

Requisiten können als benutzerdefinierte Eigenschaften bezeichnet werden, die Sie in einer Komponente registrieren und die es Ihnen ermöglichen, Daten in der übergeordneten Komponente zu definieren, ihr einen Wert zuzuweisen und den Wert dann an eine Requisiteneigenschaft zu übergeben, auf die in der untergeordneten Komponente verwiesen werden kann.

Dieser Artikel zeigt Ihnen die Kehrseite dieses Prozesses. Um die Datenwerte in der übergeordneten Komponente von der untergeordneten Komponente zu übergeben und zu aktualisieren, sodass auch alle anderen verschachtelten Komponenten aktualisiert werden, verwenden wir das Emit-Konstrukt, um die Ereignisemission und Datenaktualisierungen zu verarbeiten.

Beispiel:
Sie durchlaufen den folgenden Prozess: Ausgeben von Ereignissen von untergeordneten Komponenten, Einrichten von hörenden übergeordneten Komponenten zur Weitergabe von Daten von untergeordneten Komponenten und schließlich Aktualisieren von Datenwerten.

Wenn Sie diesen Artikel von Anfang an verfolgt haben, werden Sie das

Starterprojekt

in vs-Code herunterladen und öffnen. Dieses Projekt ist zum Zeitpunkt dieses Artikels mit vollständigem Code abgeschlossen. Der Grund dafür, dass dies ein Starterprojekt ist, besteht darin, dass Sie das Requisitenkonzept ausprobieren können, bevor Sie den Inversionsprozess einführen.

StartIn diesem Ordner finden Sie zwei Unterkomponenten: test.vue und test2.vue, deren übergeordnete Komponente ist app.vue-Datei. Wir werden die Header der beiden untergeordneten Komponenten verwenden, um diese Methode zum Ausgeben von Ereignissen zu veranschaulichen. Ihre Test.vue-Datei sollte wie folgt aussehen:

<template>
  <div>
    <h1 id="Vue-nbsp-Top-nbsp-nbsp-Artists">Vue Top 20 Artists</h1>
    <ul>
      <li v-for="(artist, x) in artists" :key="x">
        <h3 id="artist-name">{{artist.name}}</h3>
      </li>
    </ul>
  </div>
</template>
<script>
export default {
  name: &#39;Test&#39;,
  props: {
    artists: {
      type: Array
    }
  }
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
li{
    height: 40px;
    width: 100%;
    padding: 15px;
    border: 1px solid saddlebrown;
    display: flex;
    justify-content: center;
    align-items: center;
  }
a {
  color: #42b983;
}
</style>

Damit die Header die Header aus der impliziten Definition im Abschnitt „Dateneigenschaften“ erhalten, erstellen Sie den Datenabschnitt und fügen Sie die Definition hinzu, dann in der Vorlage Fügen Sie die Interpolationsnotation hinzu, etwa so: test.vue和test2.vue,其父组件是app.vue文件。 我们将使用两个子组件的标题来说明此事件发出方法。 您的Test.vue文件应如下所示:

<template>
  <div>
    <h1 id="header">{{header}}</h1>
    <ul>
      <li v-for="(artist, x) in artists" :key="x">
        <h3 id="artist-name">{{artist.name}}</h3>
      </li>
    </ul>
  </div>
</template>
<script>
export default {
  name: &#39;Test&#39;,
  props: {
    artists: {
      type: Array
    }
  },
  data() {
    return {
     header: &#39;Vue Top Artists&#39;
    }
  }
}
</script>

要使标题从数据属性部分中的隐式定义中接收标题,请创建数据部分并添加定义,然后在模板中添加插值符号,如下所示:

<template>
  <div>
    <h1 id="header">{{header}}</h1>
    <ul>
      <li v-for="(artist, x) in artists" :key="x">
        <h3 id="artist-name">{{artist.name}}</h3>
      </li>
    </ul>
  </div>
</template>
<script>
export default {
  name: &#39;Test&#39;,
  props: {
    artists: {
      type: Array
    }
  },
  data() {
    return {
     header: &#39;Vue Top Artists&#39;
    }
  },
  methods: {
    callingFunction(){
      this.header = "You clicked on header 1";
    }
  }
}
</script>

如果您运行应用程序,您将得到与开始时完全相同的接口。下一步是在click

<script>
export default {
  name: &#39;Test&#39;,
  props: {
    artists: {
      type: Array
    },
    header: {
      type: String
    }
  },
  data() {
    return {
      // header: &#39;Vue Top Artists&#39;
    }
  },
  methods: {
    callingFunction(){
      // this.header = "You clicked on header 1"
      this.$emit(&#39;toggle&#39;, &#39;You clicked header 1&#39;);
    }
  }
}
</script>

Wenn Sie die Anwendung ausführen, erhalten Sie genau die gleiche Oberfläche wie beim Start. Der nächste Schritt besteht darin, diese definierte Eigenschaft per Klick zu ändern.

Titel umschalten

Um den Titel umzuschalten, müssen Sie beim Klicken einen Ereignis-Listener zum Titel hinzufügen und eine Funktion angeben, die die Logik enthält, die beim Klicken ausgeführt wird.

<template>
  <div id="app">
    <img src="/static/imghwm/default1.png"  data-src="./assets/logo.png"  class="lazy"  alt="Vue logo" >
    <Test v-bind:header="header" v-on:toggle="toggleHeader($event)" />
    <Test v-bind:artists="artists" />
    <test2 v-bind:header="header"/>
    <test2 v-bind:artists="artists" />
  </div> 
</template>
<script>
import Test from &#39;./components/Test.vue&#39;
import Test2 from &#39;./components/Test2&#39;
export default {
  name: &#39;app&#39;,
  components: {
    Test, Test2
  },
  data (){
    return {
      artists: [
       {name: &#39;Davido&#39;, genre: &#39;afrobeats&#39;, country: &#39;Nigeria&#39;},
       {name: &#39;Burna Boy&#39;, genre: &#39;afrobeats&#39;, country: &#39;Nigeria&#39;},
       {name: &#39;AKA&#39;, genre: &#39;hiphop&#39;, country: &#39;South-Africa&#39;}
      ],
      header: &#39;Vue Top Artists&#39;
    }
  },
  methods: {
    toggleHeader(x){
      this.header = x;
    }
  }
}
</script>
<style>
#app {
  font-family: &#39;Avenir&#39;, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

Jetzt ändert sich Ihr Titel beim Klicken in die Zeichenfolge innerhalb der aufrufenden Funktion.

So verwenden Sie Ereignisemitter, um Komponentendaten in Vue.js zu ändern

Emitter einrichten

In dieser Phase möchten Sie das gleiche Verhalten an die übergeordnete Komponente übergeben, sodass sich beim Klicken jeder in der übergeordneten Komponente verschachtelte Titel ändert.

Dazu erstellen Sie einen Emitter, der ein Ereignis in der untergeordneten Komponente aussendet, das die übergeordnete Komponente abhören und auf das sie reagieren kann (dies ist die gleiche Logik wie beim Ereignis-Listener der Komponente).

Ändern Sie den Skriptteil im Test. vue-Datei in den folgenden Codeblock:

<template>
  <div>
    <h1 id="header">{{header}}</h1>
    <ul>
      <li v-for="(artist, x) in artists" :key="x">
      <h3 id="artist-name-nbsp-from-nbsp-artist-country">{{artist.name}} from {{artist.country}}</h3>
      </li>
    </ul>
  </div>
</template>
<script>
export default {
  name: &#39;Test2&#39;,
  props: {
    artists: {
      type: Array
    },
    header: {
      type: String
    }
  }
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
li{
    height: 40px;
    width: 100%;
    padding: 15px;
    border: 1px solid saddlebrown;
    display: flex;
    justify-content: center;
    align-items: center;
  }
a {
  color: #42b983;
}
</style>

Definieren Sie hier den vom Header erwarteten Datentyp als prop. Dann gibt es innerhalb dieser Methode eine Generate-Anweisung, die Vue anweist, beim Umschalten ein Ereignis auszugeben (genau wie andere Ereignisse, z. B. ein Klickereignis) und die Zeichenfolge als Parameter übergibt. Das ist alles, was Sie brauchen, um ein Ereignis einzurichten, das in einer anderen Komponente abgehört wird.

Auf ausgegebene Ereignisse achten

Nach dem Erstellen des Ereignisses müssen Sie nun als Nächstes darauf achten und darauf reagieren. Kopieren Sie diesen Codeblock in Ihre app.vue-Datei: 🎜
<template>
  <div id="app">
    <img src="/static/imghwm/default1.png"  data-src="./assets/logo.png"  class="lazy"  alt="Vue logo" >
    <Test v-bind:header="header" v-on:toggle="toggleHeader($event)" />
    <Test v-bind:artists="artists" />
    <test2 v-bind:header="header"/>
    <test2 v-bind:artists="artists" />
  </div> 
</template>
<script>
import Test from &#39;./components/Test.vue&#39;
import Test2 from &#39;./components/Test2&#39;
export default {
  name: &#39;app&#39;,
  components: {
    Test, Test2
  },
  data (){
    return {
      artists: [
       {name: &#39;Davido&#39;, genre: &#39;afrobeats&#39;, country: &#39;Nigeria&#39;},
       {name: &#39;Burna Boy&#39;, genre: &#39;afrobeats&#39;, country: &#39;Nigeria&#39;},
       {name: &#39;AKA&#39;, genre: &#39;hiphop&#39;, country: &#39;South-Africa&#39;}
      ],
      header: &#39;Vue Top Artists&#39;
    }
  },
  methods: {
    toggleHeader(x){
      this.header = x;
    }
  }
}
</script>
<style>
#app {
  font-family: &#39;Avenir&#39;, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

在模板部分,您可以看到第一个组件test上有两个vue指令。第一个是v-bind,它将initial header属性绑定到artists数组下的数据对象中的隐式定义;初始化时,将显示字符串vue top artists

第二个指令是v-on,它用于监听事件;要监听的事件是toggle(记住,您已经在测试组件中定义了它),它的调用函数是toggleheader。此函数已创建,子组件中的字符串将通过$event参数传递到此处显示。

含义

这会将数据通过发射器传递到父组件,因此由于其他组件嵌套在父组件中,因此每个嵌套组件中的数据都会重新呈现和更新。进入test2.vue文件并将此代码块复制到其中:

<template>
  <div>
    <h1 id="header">{{header}}</h1>
    <ul>
      <li v-for="(artist, x) in artists" :key="x">
      <h3 id="artist-name-nbsp-from-nbsp-artist-country">{{artist.name}} from {{artist.country}}</h3>
      </li>
    </ul>
  </div>
</template>
<script>
export default {
  name: &#39;Test2&#39;,
  props: {
    artists: {
      type: Array
    },
    header: {
      type: String
    }
  }
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
li{
    height: 40px;
    width: 100%;
    padding: 15px;
    border: 1px solid saddlebrown;
    display: flex;
    justify-content: center;
    align-items: center;
  }
a {
  color: #42b983;
}
</style>

这里,数据插值被设置并指定为道具对象中的一个字符串。在你的开发服务器上运行应用程序:

npm run serve

So verwenden Sie Ereignisemitter, um Komponentendaten in Vue.js zu ändern

可以看到,一旦事件在父组件中被响应,所有组件都会更新它们的报头,即使仅在一个子组件中指定了定义。

您可以在github上找到本教程的完整代码。

结论

您可以看到在Vue中使用事件和发射器的另一个有趣的方面:您现在可以在一个组件中创建事件,并在另一个组件中监听它并对它作出反应。

相关推荐:

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

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

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

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Ereignisemitter, um Komponentendaten in Vue.js zu ändern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Dieser Artikel ist reproduziert unter:logrocket. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
VUE.JS: Definieren seiner Rolle in der WebentwicklungVUE.JS: Definieren seiner Rolle in der WebentwicklungApr 18, 2025 am 12:07 AM

Vue.js 'Rolle in der Webentwicklung besteht darin, als progressives JavaScript -Framework zu fungieren, das den Entwicklungsprozess vereinfacht und die Effizienz verbessert. 1) Es ermöglicht Entwicklern, sich auf Geschäftslogik durch reaktionsschnelle Datenbindung und Komponentenentwicklung zu konzentrieren. 2) Das Arbeitsprinzip von Vue.js beruht auf reaktionsschnellen Systemen und virtuellem DOM, um die Leistung zu optimieren. 3) In den tatsächlichen Projekten ist es üblich, Vuex zu verwenden, um den globalen Zustand zu verwalten und die Datenreaktionsfähigkeit zu optimieren.

Vue.js verstehen: vor allem ein Frontend -FrameworkVue.js verstehen: vor allem ein Frontend -FrameworkApr 17, 2025 am 12:20 AM

Vue.js ist ein progressives JavaScript -Framework, das von Ihnen Yuxi im Jahr 2014 veröffentlicht wurde, um eine Benutzeroberfläche zu erstellen. Zu den Kernvorteilen gehören: 1. Responsive Datenbindung, automatische Aktualisierungsansicht von Datenänderungen; 2. Komponentenentwicklung kann die Benutzeroberfläche in unabhängige und wiederverwendbare Komponenten aufgeteilt werden.

Netflix -Frontend: Beispiele und Anwendungen von React (oder Vue)Netflix -Frontend: Beispiele und Anwendungen von React (oder Vue)Apr 16, 2025 am 12:08 AM

Netflix verwendet React als Front-End-Framework. 1) Reacts komponentiertes Entwicklungsmodell und ein starkes Ökosystem sind die Hauptgründe, warum Netflix es ausgewählt hat. 2) Durch die Komponentierung spaltet Netflix komplexe Schnittstellen in überschaubare Teile wie Videotiere, Empfehlungslisten und Benutzerkommentare auf. 3) Die virtuelle DOM- und Komponentenlebenszyklus von React optimiert die Rendering -Effizienz und die Verwaltung des Benutzerinteraktion.

Die Frontend -Landschaft: Wie Netflix ihre Auswahl annähteDie Frontend -Landschaft: Wie Netflix ihre Auswahl annähteApr 15, 2025 am 12:13 AM

Die Auswahl von Netflix in der Front-End-Technologie konzentriert sich hauptsächlich auf drei Aspekte: Leistungsoptimierung, Skalierbarkeit und Benutzererfahrung. 1. Leistungsoptimierung: Netflix wählte React als Hauptgerüst und entwickelte Tools wie SpeedCurve und Boomerang, um die Benutzererfahrung zu überwachen und zu optimieren. 2. Skalierbarkeit: Sie übernehmen eine Mikro-Front-End-Architektur, die Anwendungen in unabhängige Module aufteilt und die Entwicklungseffizienz und die Systemskalierbarkeit verbessern. 3. Benutzererfahrung: Netflix verwendet die Material-UI-Komponentenbibliothek, um die Schnittstelle kontinuierlich durch A/B-Tests und Benutzer-Feedback zu optimieren, um Konsistenz und Ästhetik sicherzustellen.

React vs. Vue: Welches Framework verwendet Netflix?React vs. Vue: Welches Framework verwendet Netflix?Apr 14, 2025 am 12:19 AM

NetflixuSesacustomframeworkcalted "Gibbon" Builtonreact, NotreactorVuedirect.1) TeamExperience: Wählen Sie beobädtes Vertrauen

Die Wahl der Frameworks: Was treibt die Entscheidungen von Netflix vor?Die Wahl der Frameworks: Was treibt die Entscheidungen von Netflix vor?Apr 13, 2025 am 12:05 AM

Netflix berücksichtigt hauptsächlich Leistung, Skalierbarkeit, Entwicklungseffizienz, Ökosystem, technische Schulden und Wartungskosten bei der Rahmenauswahl. 1. Leistung und Skalierbarkeit: Java und Springboot werden ausgewählt, um massive Daten und hohe gleichzeitige Anforderungen effizient zu verarbeiten. 2. Entwicklungseffizienz und Ökosystem: Verwenden Sie React, um die Effizienz der Front-End-Entwicklung zu verbessern und sein reiches Ökosystem zu nutzen. 3. Technische Schulden- und Wartungskosten: Wählen Sie Node.js, um Microservices zu erstellen, um Wartungskosten und technische Schulden zu senken.

Reagieren, Vue und die Zukunft von Netflix 'FrontendReagieren, Vue und die Zukunft von Netflix 'FrontendApr 12, 2025 am 12:12 AM

Netflix verwendet React hauptsächlich als Front-End-Framework, das durch VUE für bestimmte Funktionen ergänzt wird. 1) Die Komponentierung von React und das virtuelle DOM verbessern die Leistung und Entwicklungseffizienz von Netflix -Anwendungen. 2) VUE wird in den internen Tools und kleinen Projekten von Netflix verwendet, und seine Flexibilität und Benutzerfreundlichkeit sind entscheidend.

Vue.js im Frontend: Anwendungen und Beispiele in realer WeltVue.js im Frontend: Anwendungen und Beispiele in realer WeltApr 11, 2025 am 12:12 AM

Vue.js ist ein progressives JavaScript -Framework, das zum Erstellen komplexer Benutzeroberflächen geeignet ist. 1) Zu seinen Kernkonzepten gehören Reaktionsdaten, Komponentierungen und virtuelle DOM. 2) In praktischen Anwendungen kann es durch den Aufbau von Todo -Anwendungen und die Integration von Vuerouter demonstriert werden. 3) Beim Debuggen wird empfohlen, VODEVTOOLS und CONSOLE.LOG zu verwenden. 4) Die Leistungsoptimierung kann durch V-IF/V-Show, Listen-Rendering-Optimierung, asynchrone Belastung von Komponenten usw. erreicht werden.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

Dreamweaver Mac

Dreamweaver Mac

Visuelle Webentwicklungstools