आपके नियंत्रण रेंडर से प्रभावित होने पर Ref और इवेंट बस दोनों में समस्याएँ हैं v-if । इसलिए, मैंने एक सरल विधि के साथ जाने का फैसला किया।
यह विचार उन तरीकों को भेजने के लिए एक कतार के रूप में एक सरणी का उपयोग कर रहा है जिन्हें बाल घटक को बुलाया जाना चाहिए। एक बार जब घटक चढ़ जाता है, तो वह इस कतार को संसाधित करेगा। यह नए तरीकों को निष्पादित करने के लिए कतार देखता है।
(डेसमंड लुआ के जवाब से कुछ कोड उधार लेना)
मूल घटक कोड:
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 },
})
यह ChildComponent के लिए कोड है
<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>
और सुधार के लिए बहुत कुछ है जैसे processMethodsQueueकि एक मिक्सिन में जाना ...