Kommunikation zwischen VUE-Eltern-Kind-Komponenten und Geschwisterkomponenten

In Vue.js kann die Kommunikation zwischen übergeordneten und untergeordneten Komponenten über Requisiten und Ereignisse erreicht werden, während die Kommunikation zwischen Geschwisterkomponenten über eine gemeinsam genutzte übergeordnete Komponente oder die Verwendung der Vue-Instanz als Ereignisbus erreicht werden kann.

1. Die übergeordnete Komponente übergibt Daten an die untergeordnete Komponente (übergeordnet an untergeordnet):
   Verwenden Sie das Props-Attribut in der übergeordneten Komponente, um Daten an die untergeordnete Komponente zu übergeben, und die untergeordnete Komponente empfängt Daten über Requisiten.

<!-- 父组件 -->
   <template>
     <div>
       <child-component :message="message"></child-component>
     </div>
   </template>
   
   <script>
   import ChildComponent from './ChildComponent.vue';
   
   export default {
     components: {
       ChildComponent
     },
     data() {
       return {
         message: 'Hello from parent'
       }
     }
   }
   </script>
   
   <!-- 子组件 -->
   <template>
     <div>
       <p>{
   
   { message }}</p>
     </div>
   </template>
   
   <script>
   export default {
     props: ['message']
   }
   </script>

2. Die untergeordnete Komponente überträgt Daten an die übergeordnete Komponente (von untergeordneter zu übergeordneter Komponente):
   Verwenden Sie die Methode $emit in der untergeordneten Komponente, um ein benutzerdefiniertes Ereignis auszulösen, und die übergeordnete Komponente überwacht das Ereignis über die v-on-Anweisung.

 <!-- 父组件 -->
   <template>
     <div>
       <child-component @child-event="handleChildEvent"></child-component>
     </div>
   </template>
   
   <script>
   import ChildComponent from './ChildComponent.vue';
   
   export default {
     components: {
       ChildComponent
     },
     methods: {
       handleChildEvent(data) {
         console.log(data); // 子组件传递的数据
       }
     }
   }
   </script>
   
   <!-- 子组件 -->
   <template>
     <div>
       <button @click="emitEvent">传递数据给父组件</button>
     </div>
   </template>
   
   <script>
   export default {
     methods: {
       emitEvent() {
         this.$emit('child-event', 'Hello from child');
       }
     }
   }
   </script>

3. Kommunikation zwischen Geschwisterkomponenten:
   Wenn zwischen zwei Geschwisterkomponenten keine direkte Eltern-Kind-Beziehung besteht, können Sie den gemeinsamen Status über eine gemeinsam genutzte übergeordnete Komponente verwalten oder eine Vue-Instanz als Ereignisbus verwenden, um die Kommunikation zwischen Geschwisterkomponenten zu erreichen.

 <!-- 共享的父组件 -->
   <template>
     <div>
       <child-component1 :message="message" @update-message="updateMessage"></child-component1>
       <child-component2 :message="message"></child-component2>
     </div>
   </template>
   
   <script>
   import ChildComponent1 from './ChildComponent1.vue';
   import ChildComponent2 from './ChildComponent2.vue';
   
   export default {
     components: {
       ChildComponent1,
       ChildComponent2
     },
     data() {
       return {
         message: 'Hello from parent'
       }
     },
     methods: {
       updateMessage(newMessage) {
         this.message = newMessage;
       }
     }
   }
   </script>
   
   <!-- 子组件1 -->
   <template>
     <div>
       <p>{
   
   { message }}</p>
       <button @click="updateParentMessage">更新父组件数据</button>
     </div>
   </template>
   
   <script>
   export default {
     props: ['message'],
     methods: {
       updateParentMessage() {
         this.$emit('update-message', 'Updated message from child');
       }
     }
   }
   </script>
   
   <!-- 子组件2 -->
   <template>
     <div>
       <p>{
   
   { message }}</p>
     </div>
   </template>
   
   <script>
   export default {
     props: ['message']
   }
   </script>

Mit den oben genannten Methoden können Sie die Kommunikation zwischen übergeordneten und untergeordneten Komponenten und Geschwisterkomponenten in Vue.js realisieren.
 

Guess you like

Origin blog.csdn.net/weixin_39273589/article/details/132600301