如何在 Vue.js 中使用 v-for 遍历对象数组?
Posted
技术标签:
【中文标题】如何在 Vue.js 中使用 v-for 遍历对象数组?【英文标题】:How do I loop through an array of objects using v-for in Vue.js? 【发布时间】:2018-04-16 18:36:24 【问题描述】:我正在努力迭代这个对象数组。我没有看到任何控制台错误,也不确定数据未显示的原因。
"messages":[
"id":1,
"sender":"frank",
"message":"Lorem ipsum...",
"time":1398894261,
"status":"read"
,
"id":2,
"sender":"mary",
"message":"Lorem ipsum...",
"time":1390824261,
"status":"read"
,
"id":3,
"sender":"john",
"message":"Lorem ipsum...",
"time":1308744200,
"status":"unread"
]
我正在使用 http get 请求并且数据正在输入,但我无法遍历它。这是我的js:
new Vue(
el: '#app',
data: '',
ready: function()
// GET request
this.$http.get('https://www.example.com/file.json', function (data)
// set data on vm
this.$set('data', data.messages);
).error(function (data, status, request)
console.log('http request error')
)
)
这是我的 html:
<div v-if="data">
<li v-for="d in data"> d.sender </li>
</div>
<p>data[0].sender</p> <!-- this part works -->
【问题讨论】:
首先,在创建消息时,将消息重新定义为数据对象中的空数组。而不是 $set,只需将 data.messages 分配给 this.messages,并使用计算属性从数据中提取消息并在模板中迭代它。 【参考方案1】:在AJAX请求的回调中,this
不是vm,可以这样解决
-
使用箭头功能
使用
var vm = this
使用.bind(this)
这支笔使用箭头功能:https://codepen.io/iampaul83/pen/bYpqgm
arrow function
:
new Vue(
el: '#app',
data: '',
ready: function ()
// GET request
this.$http.get('https://www.example.com/file.json', (data) =>
// set data on vm
this.$set('data', data.messages);
).error(function (data, status, request)
console.log('http request error')
)
)
var vm = this
:
new Vue(
el: '#app',
data: '',
ready: function ()
// GET request
var vm = this
this.$http.get('https://www.example.com/file.json', function (data)
// set data on vm
vm.$set('data', data.messages);
).error(function (data, status, request)
console.log('http request error')
)
)
.bind(this)
:
new Vue(
el: '#app',
data: '',
ready: function ()
// GET request
this.$http.get('https://www.example.com/file.json', function (data)
// set data on vm
this.$set('data', data.messages);
.bind(this)).error(function (data, status, request)
console.log('http request error')
)
)
【讨论】:
【参考方案2】:您的问题可能是由于 vue.js 深度反应限制。(查看 vue 的文档)
我的建议是使用 push 而不是使用
this.$set
循环遍历您的响应并将结果一个元素地推送到您将在您的数据对象中声明的消息变量中。
data.messages.forEach( (msg ) =>
this.messages.push( msg );
在您的模板循环中通过消息变量。
【讨论】:
以上是关于如何在 Vue.js 中使用 v-for 遍历对象数组?的主要内容,如果未能解决你的问题,请参考以下文章
vue.js 中的v-for可以将遍历出来的值放入标签属性吗
在 vue js 中使用 v-for 在 div 内创建组件
Vue.js - 如何按特定属性对数组中的对象进行排序并使用“v-for”进行渲染