【发布时间】:2018-05-05 08:26:55
【问题描述】:
有一种情况,我必须在 vuejs 中的第一个 ajax(在 mounted 函数中)之后获取额外数据,我已将第二个 ajax 放入 if 条件和第一个 ajax 的 success 函数中!
它正在工作,我在 chrome 中看到 Vue Devtools 中的数据,但数据未呈现在视图中。
伪代码:
var vm = new Vue({
el: '#messages',
data: {
participants: [],
active_conversation: '',
messages: []
},
methods: {
getParticipants: function () {
return this.$http.post('message/get-participants').then(
function (response) {
vm.participants = response.data.participants;
// if there is a conversation_id param in url
if (getUrlParameterByName('conversation_id')) {
// Second Ajax Is Called Here inside First Ajax
return vm.getConversationMessages (getUrlParameterByName('conversation_id')); // this ajax call is getting data but not showing in view
}
}
},
getConversationMessages : function(conv_id){
// Second Ajax Call to get Conversation messages
// and showing them , works onClick
return this.$http.post('message/get-messages/' + conv_id).then(
function (response) {
if (response.data.status == 'success') {
console.log(response.data.messages)
vm.messages = response.data.messages;
vm.$forceUpdate();
}
},
mounted: function () {
this.getParticipants()
}
})
获取特定对话消息的第二个 Ajax 调用正在响应 onclick 事件并显示消息,但是当在第一个 Ajax 成功响应 (getParticipants()) 中使用此函数时,它正确获取数据我可以看到在 DevTools VueJs Extension 中设置了消息但视图不显示消息,我尝试过 vm.$set() 但没有机会。
更新:
第二个 Ajax 工作没有错误并且消息数据属性被填充(我检查了 Vue DevTools),唯一的问题是视图不显示消息!但是当我通过单击对话手动执行此操作时,再次执行第二个 ajax 并且我可以看到消息!,我还在第二个 ajax 之后尝试了vm.$forceUpdate(),但没有机会。
Update2 html 部分(错误在这里!!)
<a vbind:id="conv.id" v-on:click="getMessages(conv.id)" onclick="$('#user-messages').addClass('active')">
【问题讨论】:
-
您从未定义过
vm?你应该得到一个 JS 错误。 -
@BrianGlaz 在第一行定义!你什么意思?
-
顺便说一句,这是一个伪代码,我的代码正在运行,我有渲染问题,我也试过
vm.$set()函数 -
试试
created而不是mounted?我相信当mounted被调用时DOM 已经被渲染了。您也可以尝试将this.getParticipants包装在Vue.nextTick函数中。 -
@BrianGlaz 试过
created同样的结果,我对Vue.nextTick一无所知让我搜索!
标签: javascript ajax vue.js vuejs2 vue-resource