Rumah  >  Artikel  >  hujung hadapan web  >  Apakah yang perlu saya lakukan jika uniapp gagal memanggil kaedah subkomponen?

Apakah yang perlu saya lakukan jika uniapp gagal memanggil kaedah subkomponen?

PHPz
PHPzasal
2023-04-27 09:02:52699semak imbas

Apabila saya menggunakan uniapp untuk membangunkan program kecil baru-baru ini, saya menghadapi masalah: memanggil kaedah subkomponen gagal. Selepas beberapa penyelidikan dan penyahpepijatan, saya menemui penyelesaian dan kini berkongsi dengan anda.

Pertama, mari kita lihat senario di mana masalah ini berlaku. Komponen tersuai diperkenalkan ke dalam halaman, dan terdapat kaedah dalam komponen yang perlu dipanggil secara luaran. Kita boleh mencapai ini dengan mentakrifkan kaedah dalam kaedah objek komponen dan memanggil kaedah di dalam komponen. Walau bagaimanapun, apabila benar-benar memanggil, kami mendapati bahawa kaedah ini sentiasa mengembalikan nilai nol, seperti yang ditunjukkan di bawah:

// 引入组件
<template>
  <custom-component ref="customComponent"></custom-component>
</template>

<script>
  import customComponent from '@/components/custom-component.vue'
  export default {
    components: {
      customComponent
    },
    mounted() {
      // 调用子组件方法
      const data = this.$refs.customComponent.customMethod()
      console.log(data) // 输出:undefined
    }
  }
</script>

// custom-component.vue
<template>
  <div>这是一个自定义组件</div>
</template>

<script>
  export default {
    methods: {
      customMethod() {
        return '这是从子组件返回的数据'
      }
    }
  }
</script>

Di sini kami cuba memanggil kaedah customMethod komponen anak dalam komponen induk dan mencetak nilai pulangan kaedah tersebut. Walau bagaimanapun, dalam konsol kami mendapati bahawa nilai pulangan tidak ditentukan.

Setelah disiasat, didapati ini kerana kaedah komunikasi komponen dalam uniapp berbeza daripada kaedah komunikasi komponen asli Vue. Dalam uniapp, kita perlu menggunakan uni.$emit untuk menghantar acara dan mendengar acara dalam komponen. Berikut ialah contoh yang betul:

// 引入组件
<template>
  <custom-component @customEvent="onCustomEvent"></custom-component>
</template>

<script>
  import customComponent from '@/components/custom-component.vue'
  export default {
    components: {
      customComponent
    },
    methods: {
      onCustomEvent(data) {
        console.log(data) // 输出:这是从子组件返回的数据
      }
    }
  }
</script>

// custom-component.vue
<template>
  <div>这是一个自定义组件</div>
</template>

<script>
  export default {
    methods: {
      customMethod() {
        // 向父组件发送事件
        this.$emit('customEvent', '这是从子组件返回的数据')
      }
    }
  }
</script>

Dalam contoh ini, kami menggunakan @customEvent untuk mendengar peristiwa subkomponen dan memproses data yang dihantar daripada subkomponen dalam kaedah onCustomEvent. Perlu diingatkan bahawa kaedah menghantar acara perlu dilakukan dalam komponen anak, dan bukannya memanggil kaedah komponen anak dalam komponen induk.

Ini kerana dalam uniapp, komponen induk tidak boleh memanggil kaedah komponen anak secara langsung. Sebaliknya, kita perlu menggunakan peristiwa untuk pemindahan data dan komunikasi komponen.

Ringkasnya, kaedah komunikasi komponen uniapp dan Vue asli sedikit berbeza. Dalam uniapp, kita perlu berkomunikasi antara komponen melalui acara. Terutama apabila memanggil kaedah subkomponen, kita perlu menggunakan $emit untuk menghantar acara dan mendengar acara dalam subkomponen untuk mencapai ini.

Saya harap artikel ini bermanfaat kepada semua orang, terima kasih kerana membaca!

Atas ialah kandungan terperinci Apakah yang perlu saya lakukan jika uniapp gagal memanggil kaedah subkomponen?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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