컨트롤 렌더가 v-if. 그래서 저는 더 간단한 방법을 사용하기로 결정했습니다.
아이디어는 배열을 큐로 사용하여 호출해야하는 메서드를 자식 구성 요소에 보내는 것입니다. 구성 요소가 마운트되면이 대기열을 처리합니다. 새로운 메서드를 실행하기 위해 큐를 감시합니다.
(Desmond Lua의 답변에서 일부 코드 대여)
상위 구성 요소 코드 :
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믹스 인으로 이동 하는 것과 같은 개선의 여지가 많이 있습니다 .