Kaedah: 1. Berkomunikasi melalui nenek moyang yang sama "$parent" atau "$root"; parameter "$emit" ialah nilai yang diluluskan dan komponen adik beradik lain mendengar acara tersuai melalui "$on".
Persekitaran pengendalian artikel ini: sistem Windows 10, versi Vue 2.9.6, komputer DELL G3.
1. Konsep komunikasi antara komponen
Sebelum kita mulakan, kami meletakkan komponen Pisah perkataan komunikasi antara
Komponen
Komunikasi
Kita semua tahu bahawa komponen adalah salah satu fungsi yang paling berkuasa bagi vue .vue in vue. Ia adalah komponen
Komunikasi merujuk kepada pengirim yang menghantar maklumat kepada penerima melalui media tertentu dan format tertentu untuk mencapai tujuan tertentu. Dalam erti kata yang luas, trafik mana-mana maklumat adalah komunikasi
Komunikasi antara komponen bermaksud komponen (.vue) menghantar maklumat dengan cara tertentu untuk mencapai tujuan tertentu
Sebagai contoh
Apabila kami menggunakan komponen jadual dalam rangka kerja UI, kami mungkin menghantar data tertentu ke dalam komponen jadual Ini pada asasnya membentuk komunikasi antara komponen
2. Komponen Apakah yang dimaksudkan antara. -penyelesaian komunikasi?
Pada zaman dahulu, orang ramai menghantar maklumat melalui stesen pos, merpati terbang untuk menyampaikan mesej, penggera kebakaran suar, simbol, bahasa, mata, sentuhan, dll. Hari ini, bila-bila masa Dengan perkembangan pesat sains dan teknologi, komunikasi pada asasnya diselesaikan secara berwayar atau tanpa wayar Pelbagai kaedah komunikasi seperti telefon berwayar, telefon talian tetap, telefon tanpa wayar, telefon bimbit, Internet dan juga panggilan video telah muncul satu demi satu
<.>Daripada perenggan di atas, kita dapat melihat bahawa intipati komunikasi adalah penyegerakan maklumat, perkongsian Kembali ke vue, setiap komponen mempunyai skopnya sendiri, dan data antara komponen tidak boleh dikongsi Tetapi dalam kerja pembangunan sebenar, kita sering perlu berkongsi data antara komponen, yang juga merupakan tujuan komunikasi komponenAdalah perlu bagi mereka untuk berkomunikasi antara satu sama lain, supaya membentuk sistem yang organik dan lengkap2 Klasifikasi komunikasi antara komponen
Pengkelasan komunikasi antara komponen boleh dibahagikan kepada yang berikut3. Pelan komunikasi antara komponen
Organisasi 8. penyelesaian komunikasi biasa dalam vuedata pas props
Senario yang berkenaan: komponen induk menghantar data kepada komponen anakKomponen anak menetapkan atribut props dan mentakrifkan parameter yang akan diterima daripada komponen indukKomponen induk menggunakan literal apabila menggunakan anak tag komponen Untuk melepasi nilaiChildren.vueprops:{ // 字符串形式 name:String // 接收的类型参数 // 对象形式 age:{ type:Number, // 接收的类型为数值 defaule:18, // 默认值为18 require:true // age属性必须传递 } }
$emit mencetuskan peristiwa tersuai
Senario yang berkenaan: komponen kanak-kanak menghantar data kepada komponen indukKomponen kanak-kanak mencetuskan peristiwa tersuai melalui $emit, $emit second parameter ialah nilai yang diluluskan Komponen induk mengikat pendengar untuk mendapatkan parameter yang diluluskan oleh komponen anakChilfen.vuethis.$emit('add', good) Father.vue <Children @add="cartAdd($event)" />
ref
Komponen induk menetapkan rujukan apabila menggunakan komponen anakKomponen induk memperoleh data dengan menetapkan rujukan komponen anakKomponen induk<Children ref="foo" /> this.$refs.foo // 获取子组件实例,通过子组件实例我们就能拿到对应的数据
EventBus
Senario penggunaan: komponen adik-beradik lulus nilai Buat bas masa pusat EventBusKomponen adik-beradik mencetus peristiwa tersuai melalui $ emit, $emit Parameter kedua ialah nilai lulus Komponen adik beradik lain mendengar acara tersuai melalui $onBus.js// 创建一个中央时间总线类 class Bus { constructor() { this.callbacks = {}; // 存放事件的名字 } $on(name, fn) { this.callbacks[name] = this.callbacks[name] || []; this.callbacks[name].push(fn); } $emit(name, args) { if (this.callbacks[name]) { this.callbacks[name].forEach((cb) => cb(args)); } } }
// main.js Vue.prototype.$bus = new Bus() // 将$bus挂载到vue实例的原型上 // 另一种方式 Vue.prototype.$bus = new Vue() // Vue已经实现了Bus的功能
Children1.vue this.$bus.$emit('foo') Children2.vue this.$bus.$on('foo', this.handle)
attrs dan pendengar
Senario yang boleh digunakan: Nenek moyang menghantar data kepada keturunanTetapkan atribut muat naik kelompok $attrs dan $listenersthis.$parent.on('add',this.add)
Mengandungi pengikatan sifat (kecuali kelas dan gaya) yang tidak diiktiraf (dan diperoleh) sebagai prop dalam skop induk.
this.$parent.emit('add')
menyediakan dan menyuntik
dalam komponen ancestor Tentukan atribut sediakan dan kembalikan nilai yang diluluskan Komponen keturunan menerima nilai yang diluluskan oleh komponen melalui suntikan Komponen nenek moyang// child:并未在props中声明foo <p>{{$attrs.foo}}</p> // parent <HelloWorld foo="foo"/>
// 给Grandson隔代传值,communication/index.vue <Child2 msg="lalala" @some-event="onSomeEvent"></Child2> // Child2做展开 <Grandson v-bind="$attrs" v-on="$listeners"></Grandson> // Grandson使⽤ <div @click="$emit('some-event', 'msg from grandson')"> {{msg}} </div>
Komponen keturunan inject:['foo'] // Dapatkan nilai yang diluluskan oleh komponen nenek moyang
vuexSenario yang berkenaan: Pemindahan data komponen dengan perhubungan yang kompleks
Vuex berfungsi sebagai bekas untuk menyimpan pembolehubah yang dikongsi
keadaan digunakan untuk menyimpan pembolehubah yang dikongsi
pengambil, anda boleh menambah keadaan terbitan pengambil, (bersamaan dengan stor di kedai Dikira atribut), digunakan untuk mendapatkan nilai pembolehubah yang dikongsi
mutasi digunakan untuk menyimpan kaedah untuk mengubah suai keadaan.
Tindakan juga digunakan untuk menyimpan kaedah untuk mengubah keadaan, tetapi tindakan adalah berdasarkan mutasi. Biasa digunakan untuk melakukan beberapa operasi tak segerak
Ringkasan
Untuk pemindahan data komponen perhubungan ibu bapa-anak, prop dan $emit boleh dipilih untuk pemindahan Anda juga boleh memilih ref
Untuk pemindahan data komponen perhubungan adik-beradik, anda boleh Pilih $bus, dan kemudian anda boleh memilih $parent untuk pemindahan
Untuk pemindahan data komponen moyang dan keturunan, anda boleh memilih attrs dan pendengar atau Provide dan Inject
Pemindahan data komponen untuk perhubungan yang kompleks boleh disimpan dan dikongsi melalui Pembolehubah vuex
[Cadangan berkaitan: "tutorial vue.js"]
Atas ialah kandungan terperinci Apakah cara untuk berkomunikasi antara komponen Vue?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!