【发布时间】:2018-03-11 07:03:56
【问题描述】:
我有一个 vue.js 子组件,其中包含一个名为 messages 的数据数组。在数组中插入新元素时如何更新 DOM。
这是我的代码的简化 sn-p:
<template>
<q-item v-for="(msg, i) in messages" :key="i" >
<!-- q-item is a custom component of quasar framework -->
<!-- some code here related to msg -->
</q-item>
<template/>
<script>
export default {
data () {
return {
messages: []
}
},
methods: {
submitMessage () {
// submit the formData
this.submitFormData({url: '/messages/new', formData})
.then((message) => {
this.messages.push(message)
})
},
}
}
}
<script/>
使用 vue devtools 我可以看到消息数组已更新,但我无法根据它更新 DOM。
注意这是一个子组件,而不是 vue 实例($forceUpdate 不起作用)
【问题讨论】:
-
模板代码在哪里?
-
可以添加完整的组件代码吗?我认为您的代码中还有另一个问题,因为如果数据发生变化,Vuejs 会自动重新渲染组件
-
在向该数组推送新消息后尝试添加
console.log( this.messages )。它应该包含新添加的消息。问题可能出在此处未显示的代码的不同部分。 -
我用模板@Mjh 更新了问题
-
您的
methods对象不应在您的data方法中。目前您在data方法中的return语句不是有效的javascript。
标签: javascript arrays vue.js vuejs2 vue-component