У вас проблема с реактивностью в глубине, документация VueJS дает хорошее объяснение: Реактивность в глубине - как отслеживаются изменения
Существует несколько способов вызвать рендерингкомпоненты.Самый очевидный из них будет this.$forceUpdate()
.Однако, это заставляет когда-либо компонент перерисовываться, и я не рекомендовал бы использовать его.Если запускаться несколько раз за короткое время, он может работать медленно.
Следующие два решения сравниваются гораздо лучше только с компонентом без других.
Первый способ запуска рендеринга:
<script>
export default {
data: () => {
return {
treeData: []
}
},
methods: {
updateTree () {
const treeData = JSON.parse(JSON.stringify(this.treeData))
this.treeData = []
this.$nextTick(function () => {
this.treeData = treeData
})
}
}
}
</script>
Или вы можете просто использовать v-if
для родителя и вызвать this.$emit('updateTree')
от детей:
<template>
<child-component @update="updateTree" :treeData="treeData" />
</template>
<script>
import ChildComponent from '../components/ChildComponent'
export default {
data: () => {
return {
showTree: true,
treeData: []
}
},
components: { 'child-component' : ChildComponent },
methods: {
fetchAPIData () {
// ... ajax
this.treeData = apiResponse
},
updateTree () {
this.showTree = false
this.$nextTick(function () => {
this.showTree = true
})
}
},
mounted () {
this.fetchAPIData()
}
}
</script>