Vue ist ein fortschrittliches Framework zum Erstellen von Benutzeroberflächen und gehört derzeit zu den beliebtesten Frameworks in der Frontend-Entwicklung. Bei der Entwicklung von Vue ist die Synchronisierung von Listendaten ein relativ komplexes Thema. In diesem Artikel werden einige Methoden zur Synchronisierung von Vue-Listendaten vorgestellt.
1. Datenübertragung zwischen Komponenten
In Vue sind Komponenten die Grundeinheiten der Code-Wiederverwendung und der logischen Organisation, und die Datenübertragung zwischen Komponenten erfordert die Verwendung von Requisiteneigenschaften und Emittieren Ereignisse. Bei der Synchronisierung von Listendaten übergibt die übergeordnete Komponente die Daten über das Props-Attribut an die untergeordnete Komponente. Nachdem die untergeordnete Komponente die Daten geändert hat, übergibt sie die Daten über das Emissionsereignis an die übergeordnete Komponente und realisiert so die Synchronisierung der Liste Daten.
Bei der Verwendung von Props-Attributen müssen Sie die folgenden Punkte beachten:
Der Beispielcode lautet wie folgt:
Übergeordnete Komponente:
<template> <div> <child-component :list="list" @change="handleChange"></child-component> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { data() { return { list: [ { id: 1, name: 'Vue' }, { id: 2, name: 'React' }, { id: 3, name: 'Angular' } ] }; }, methods: { handleChange(newList) { this.list = newList; } }, components: { ChildComponent } }; </script>
Untergeordnete Komponente:
<template> <div> <ul> <li v-for="item in list" :key="item.id"> <input type="text" v-model="item.name" @change="handleInputChange(item)"> </li> </ul> </div> </template> <script> export default { props: ['list'], methods: { handleInputChange(item) { this.$emit('change', this.list); } } }; </script>
import Vue from 'vue'; import Vuex from 'vuex'; Vue.use(Vuex); export default new Vuex.Store({ state: { list: [ { id: 1, name: 'Vue' }, { id: 2, name: 'React' }, { id: 3, name: 'Angular' } ] }, mutations: { updateList(state, newList) { state.list = newList; } } });
<template> <div> <child-component></child-component> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent } }; </script>
<template> <div> <ul> <li v-for="item in list" :key="item.id"> <input type="text" v-model="item.name" @change="handleInputChange(item)"> </li> </ul> </div> </template> <script> import { mapState, mapMutations } from 'vuex'; export default { computed: mapState(['list']), methods: { ...mapMutations(['updateList']), handleInputChange(item) { this.updateList(this.list); } } }; </script>
Im obigen Code ist das Listenarray im Status definiert. Die übergeordnete Komponente übergibt keine Daten mehr an die untergeordnete Komponente über die Funktion „mapState“ und rendert die Listendaten. Wenn sich das Eingabefeld in der Unterkomponente ändert, werden die neuen Listendaten in Mutationen über die Funktion „mapMutations“ an die Methode „updateList“ übermittelt, wodurch die Daten im Status aktualisiert werden.
3. $emit und Bereitstellung/Injektion
In der Vue2.2.0-Version wurde über diese API eine neue API zum Bereitstellen und Injizieren von Daten hinzugefügt , Sie können die Fähigkeit implementieren, Daten dynamisch zwischen Komponenten einzufügen. Bei der Synchronisierung von Listendaten können Datenfreigabe und -synchronisierung durch Bereitstellen/Injizieren erreicht werden.
Bei der Verwendung von Provide/InjectAPI müssen Sie die folgenden Punkte beachten:
provide definiert die Daten, die geteilt werden müssen, und inject deklariert die Daten, die injiziert werden müssen.Übergeordnete Komponente:
<template> <div> <child-component></child-component> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { provide() { return { list: this.list, updateList: (newList) => { this.list = newList; } } }, data() { return { list: [ { id: 1, name: 'Vue' }, { id: 2, name: 'React' }, { id: 3, name: 'Angular' } ] }; }, components: { ChildComponent } }; </script>
Untergeordnete Komponente:
<template> <div> <ul> <li v-for="item in list" :key="item.id"> <input type="text" v-model="item.name" @change="handleInputChange(item)"> </li> </ul> </div> </template> <script> export default { inject: ['list', 'updateList'], methods: { handleInputChange(item) { this.updateList(this.list); } } }; </script>
Das obige ist der detaillierte Inhalt vonSynchronisierungsmethode für Vue-Listendaten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!