Rumah hujung hadapan web View.js Perubahan dalam Vue3 berbanding Vue2: komunikasi yang lebih fleksibel antara komponen

Perubahan dalam Vue3 berbanding Vue2: komunikasi yang lebih fleksibel antara komponen

Jul 07, 2023 am 10:31 AM
vue fleksibiliti Komunikasi antara komponen

Perubahan dalam Vue3 berbanding Vue2: Komunikasi yang lebih fleksibel antara komponen

Dalam pembangunan bahagian hadapan, komponen ialah modul asas untuk membina aplikasi yang kompleks. Dalam rangka kerja Vue, komunikasi antara komponen sentiasa menjadi topik penting. Dalam versi Vue2 tradisional, komunikasi antara komponen terutamanya dicapai melalui prop dan acara. Walau bagaimanapun, apabila kerumitan antara muka UI dan logik perniagaan meningkat, pendekatan ini mungkin menjadi tidak fleksibel. Versi Vue3 memberikan kami lebih banyak pilihan untuk menjadikan komunikasi antara komponen lebih mudah dan fleksibel.

Dalam Vue3, kami boleh menggunakan provide dan inject untuk mencipta sistem suntikan pergantungan yang boleh digunakan merentas berbilang peringkat sarang. Di bawah ialah contoh kod yang menunjukkan cara menggunakan provide dan inject untuk melaksanakan komunikasi antara komponen. provideinject来创建一个可用于跨多个嵌套级别的依赖项注入系统。下面是一个示例代码,展示了如何使用provideinject来实现组件间的通信。

// ParentComponent.vue
<template>
  <div>
    <h2>Parent Component</h2>
    <child-component></child-component>
  </div>
</template>

<script>
import { provide, ref } from 'vue';
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent
  },
  setup() {
    const message = ref('Hello from parent!');

    provide('message', message);

    return {
      message
    };
  }
};
</script>


// ChildComponent.vue
<template>
  <div>
    <h2>Child Component</h2>
    <button @click="updateMessage">Update Message</button>
    <p>{{ message }}</p>
  </div>
</template>

<script>
import { inject } from 'vue';

export default {
  setup() {
    const message = inject('message');
    
    const updateMessage = () => {
      message.value = 'Updated message from child!';
    };

    return {
      message,
      updateMessage
    };
  }
};
</script>
Salin selepas log masuk

在上面的示例中,父组件ParentComponent通过provide函数将message变量传递给子组件ChildComponent。子组件通过inject函数来接收父组件提供的message变量。这样,子组件就可以直接访问父组件的数据,并且在需要的时候进行更新。

使用provideinject可以实现灵活的组件通信,特别是在多层嵌套组件之间。这种方式不仅减少了组件间传递数据的复杂度,还能提高代码的可读性和可维护性。

除了provideinject,Vue3还引入了新的全局事件总线(Event Bus)系统,使得组件间的通信更加方便。我们可以使用createApp函数的config选项来创建全局的事件总线,然后在组件中使用$on$off$emit等方法来进行事件的监听和触发。

下面是一个使用全局事件总线进行组件通信的示例代码:

// main.js
import { createApp } from 'vue';
import App from './App.vue';

const app = createApp(App);

app.config.globalProperties.$bus = createEventBus();

app.mount('#app');

// event-bus.js
import mitt from 'mitt';

export function createEventBus() {
  const bus = mitt();

  return {
    $on: bus.on,
    $off: bus.off,
    $emit: bus.emit
  };
}

// ParentComponent.vue
<template>
  <div>
    <h2>Parent Component</h2>
    <button @click="updateMessage">Update Message</button>
  </div>
</template>

<script>
export default {
  methods: {
    updateMessage() {
      this.$bus.$emit('message-updated', 'Updated message from parent!');
    }
  }
};
</script>


// ChildComponent.vue
<template>
  <div>
    <h2>Child Component</h2>
    <p>{{ message }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: ''
    };
  },
  created() {
    this.$bus.$on('message-updated', (newMessage) => {
      this.message = newMessage;
    });
  }
};
</script>
Salin selepas log masuk

在上面的示例中,我们通过创建全局事件总线$bus,实现了父组件向子组件传递数据。父组件通过调用$emit方法触发message-updated事件,并将新的消息作为参数进行传递。子组件通过监听message-updated事件,并在事件回调中更新自己的messagerrreee

Dalam contoh di atas, komponen induk ParentComponent menghantar pembolehubah mesej kepada komponen anak ChildComponent melalui provide kod> fungsi >. Komponen anak menerima pembolehubah <code>mesej yang disediakan oleh komponen induk melalui fungsi inject. Dengan cara ini, komponen anak boleh terus mengakses data komponen induk dan mengemas kininya apabila diperlukan.

Menggunakan provide dan inject boleh mencapai komunikasi komponen yang fleksibel, terutamanya antara komponen bersarang berbilang lapisan. Pendekatan ini bukan sahaja mengurangkan kerumitan pemindahan data antara komponen, tetapi juga meningkatkan kebolehbacaan dan kebolehselenggaraan kod. 🎜🎜Selain menyediakan dan inject, Vue3 juga memperkenalkan sistem bas acara global (Event Bus) baharu, menjadikan komunikasi antara komponen lebih mudah. Kita boleh menggunakan pilihan config bagi fungsi createApp untuk mencipta bas acara global, dan kemudian menggunakan $on, $off, <code>$emit dan kaedah lain untuk memantau dan mencetuskan peristiwa. 🎜🎜Berikut ialah contoh kod yang menggunakan bas acara global untuk komunikasi komponen: 🎜rrreee🎜Dalam contoh di atas, kami melaksanakan komponen induk untuk menghantar data kepada komponen anak dengan mencipta bas acara global $bus . Komponen induk mencetuskan acara <code>message-updated dengan memanggil kaedah $emit dan menghantar mesej baharu sebagai parameter. Subkomponen mendengar acara message-updated dan mengemas kini data message mereka sendiri dalam panggilan balik acara. 🎜🎜Rangka kerja Vue3 memberikan kita kaedah komunikasi yang lebih fleksibel antara komponen Sama ada sistem suntikan pergantungan atau sistem bas acara global, ia menjadikan pembangunan komponen lebih mudah dan fleksibel. Ciri baharu ini membolehkan kami membina aplikasi kompleks dengan lebih baik dan meningkatkan kebolehbacaan dan kebolehselenggaraan kod. Kami berharap untuk menggunakan ciri ini dalam projek sebenar untuk meningkatkan kecekapan pembangunan dan kualiti kod. 🎜

Atas ialah kandungan terperinci Perubahan dalam Vue3 berbanding Vue2: komunikasi yang lebih fleksibel antara komponen. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara menggunakan bootstrap di vue Cara menggunakan bootstrap di vue Apr 07, 2025 pm 11:33 PM

Menggunakan bootstrap dalam vue.js dibahagikan kepada lima langkah: Pasang bootstrap. Import bootstrap di main.js. Gunakan komponen bootstrap secara langsung dalam templat. Pilihan: Gaya tersuai. Pilihan: Gunakan pemalam.

Cara menambah fungsi ke butang untuk vue Cara menambah fungsi ke butang untuk vue Apr 08, 2025 am 08:51 AM

Anda boleh menambah fungsi ke butang VUE dengan mengikat butang dalam templat HTML ke kaedah. Tentukan kaedah dan tulis logik fungsi dalam contoh Vue.

Cara Menggunakan Watch di Vue Cara Menggunakan Watch di Vue Apr 07, 2025 pm 11:36 PM

Pilihan Watch di Vue.js membolehkan pemaju mendengar perubahan dalam data tertentu. Apabila data berubah, tontonkan mencetuskan fungsi panggil balik untuk melakukan paparan kemas kini atau tugas lain. Pilihan konfigurasinya termasuk segera, yang menentukan sama ada untuk melaksanakan panggilan balik dengan serta -merta, dan mendalam, yang menentukan sama ada untuk mendengarkan secara rekursif terhadap objek atau tatasusunan.

Apakah yang dimaksudkan dengan pembangunan Vue Multi-Page? Apakah yang dimaksudkan dengan pembangunan Vue Multi-Page? Apr 07, 2025 pm 11:57 PM

Pembangunan pelbagai halaman Vue adalah cara untuk membina aplikasi menggunakan rangka kerja VUE.JS, di mana permohonan dibahagikan kepada halaman berasingan: Penyelenggaraan kod: Memisahkan aplikasi ke dalam beberapa halaman boleh menjadikan kod lebih mudah untuk dikendalikan dan diselenggarakan. Modularity: Setiap halaman boleh digunakan sebagai modul yang berasingan untuk penggunaan semula dan penggantian mudah. Routing mudah: Navigasi antara halaman boleh diuruskan melalui konfigurasi penghalaan mudah. Pengoptimuman SEO: Setiap halaman mempunyai URL sendiri, yang membantu SEO.

Cara merujuk fail js dengan vue.js Cara merujuk fail js dengan vue.js Apr 07, 2025 pm 11:27 PM

Terdapat tiga cara untuk merujuk kepada fail JS dalam vue.js: Secara langsung tentukan jalan menggunakan & lt; skrip & gt; tag ;; import dinamik menggunakan cangkuk kitaran hayat yang dipasang (); dan mengimport melalui Perpustakaan Pengurusan Negeri VUEX.

Cara kembali ke halaman sebelumnya oleh Vue Cara kembali ke halaman sebelumnya oleh Vue Apr 07, 2025 pm 11:30 PM

Vue.js mempunyai empat kaedah untuk kembali ke halaman sebelumnya: $ router.go (-1) $ router.back () menggunakan & lt; router-link to = & quot;/& quot; Komponen Window.History.Back (), dan pemilihan kaedah bergantung pada tempat kejadian.

Cara melompat ke Div Vue Cara melompat ke Div Vue Apr 08, 2025 am 09:18 AM

Terdapat dua cara untuk melompat elemen div di Vue: Gunakan Vue Router dan tambahkan komponen router-link. Tambah pendengar acara @Click dan panggil ini. $ Router.push () kaedah untuk melompat.

Cara Menggunakan Vue Traversal Cara Menggunakan Vue Traversal Apr 07, 2025 pm 11:48 PM

Terdapat tiga kaedah umum untuk vue.js untuk melintasi tatasusunan dan objek: Arahan V-untuk digunakan untuk melintasi setiap elemen dan membuat templat; Arahan V-mengikat boleh digunakan dengan V-untuk menetapkan nilai atribut secara dinamik untuk setiap elemen; dan kaedah .map boleh menukar elemen array ke dalam tatasusunan baru.

See all articles