开发者问题收集

尝试添加数据时推送到数组会导致 Vuejs 中出现错误

2016-11-27
1514

我正在研究一个无限滚动解决方案,并尝试将数据推送到对象数组上,但出现错误:

vue.common.js?e881:2643 [Vue warn]: Error when rendering anonymous component at /Users/Deric/Sites/mobile/lawn-mobile/src/components/jobs/index.vue: warn @ vue.common.js?e881:2643Vue._render @ vue.common.js?e881:2253(anonymous function) @ vue.common.js?e881:1699get @ vue.common.js?e881:736run @ vue.common.js?e881:805flushSchedulerQueue @ vue.common.js?e881:623nextTickHandler @ vue.common.js?e881:401
vue.common.js?e881:2262 TypeError: Cannot read property 'length' of undefined(…)

如果我只是设置数据,它可以工作,但无限滚动会覆盖数据而不是附加到数据。这是我的数据对象:

data () {
  return {
    jobs: [],

这是我的 http 调用:

getJobs(pageNumber = 1) {
  let api = SessionStorage.get.item('api')
  let url = `${api.base_url}jobs?page=${pageNumber}`
  this.$http.get(url).then((response) => {
    console.log(response.body.data)
    this.jobs.push(response.body.data)

console.log 如下所示:

在此处输入图像描述

让它工作的诀窍是什么?我也尝试过 concat ,但是也不起作用。

2个回答

您是否正确使用了 concat,即

this.jobs = this.jobs.concat(response.body.data)

仅当您的 console.log 输出正确时,这才会为您提供一个对象数组,这似乎是您想要的。

GuyC
2016-11-27

看起来 this 没有指向正确的对象,请尝试以下操作-

getJobs(pageNumber = 1) {
  let api = SessionStorage.get.item('api')
  let url = `${api.base_url}jobs?page=${pageNumber}`
  let self = this 
  this.$http.get(url).then((response) => {
    console.log(self.jobs)
    console.log(response.body.data)
    self.jobs.push(response.body.data)
Saurabh
2016-11-27