Ref ve olay veri yolunun her ikisinde de, denetim işlemeniz etkilendiğinde sorunlar vardır v-if. Bu yüzden daha basit bir yöntem kullanmaya karar verdim.
Buradaki fikir, alt bileşene çağrılması gereken yöntemleri göndermek için bir diziyi kuyruk olarak kullanmaktır. Bileşen monte edildikten sonra bu kuyruğu işleyecektir. Yeni yöntemleri çalıştırmak için kuyruğu izler.
(Desmond Lua'nın cevabından bir kod ödünç almak)
Ana bileşen kodu:
import ChildComponent from './components/ChildComponent'
new Vue({
el: '#app',
data: {
item: {},
childMethodsQueue: [],
},
template: `
<div>
<ChildComponent :item="item" :methods-queue="childMethodsQueue" />
<button type="submit" @click.prevent="submit">Post</button>
</div>
`,
methods: {
submit() {
this.childMethodsQueue.push({name: ChildComponent.methods.save.name, params: {}})
}
},
components: { ChildComponent },
})
Bu, ChildComponent kodudur
<template>
...
</template>
<script>
export default {
name: 'ChildComponent',
props: {
methodsQueue: { type: Array },
},
watch: {
methodsQueue: function () {
this.processMethodsQueue()
},
},
mounted() {
this.processMethodsQueue()
},
methods: {
save() {
console.log("Child saved...")
},
processMethodsQueue() {
if (!this.methodsQueue) return
let len = this.methodsQueue.length
for (let i = 0; i < len; i++) {
let method = this.methodsQueue.shift()
this[method.name](method.params)
}
},
},
}
</script>
Ve processMethodsQueuebir miksere geçmek gibi iyileştirme için çok yer var ...