* цикл ngFor над объектами mLab выдает ошибку при попытке diff '[object Object] даже после объявления массива - PullRequest
0 голосов
/ 21 октября 2019

У меня есть массив, объявленный как carousels: any = [] в моем файле TS, но я продолжаю получать сообщение об ошибке «разрешены только массивы и итерации» всякий раз, когда я зацикливаюсь на нем с помощью * ngFor. Данные внутри этого массива получены из mLab.

Цель моего кода - обновить объект из mLab, используя его идентификатор, который, кажется, работает нормально. Но всякий раз, когда я нажимаю обновление, учитывая тот факт, что обновление даже работает, почему я все равно получаю ошибку?

Я пытался изменить carousels: any = [] на carousels = [], но, похоже, ничего не изменилось.

Это мой код.

api.js (бэкэнд) - это код, который связывается с базой данных.

router.route('carousel/update/:_id).put(function(req, res) {

db.collection('home').updateOne({"_id": ObjectId(req.params._id)}, {$set: req.body}, (err, results) => {
if (err) throw err;
res.send(results)
console.log(req.params._id)
});
});

home.service.ts

return this.http.put<any[]>('./api/carousel/update/' + id, {'header': newheader, 'subheader': newsubheader})
}

component.ts

объявление:

carousels: any = [];

функция обновления:

updateSlide(id: number){
this.HomeService.updateSlide(id, this.header, this.subheader).subscribe(slides => {this.carousels = slides})
}

Обновление работает, но я все еще получаю сообщение об ошибке: ошибка при попытке изменить '[объект объекта]'. разрешены только массивы и итерации

Ответы [ 2 ]

0 голосов
/ 22 октября 2019

После нескольких чтений и публикаций я обнаружил, что моя ошибка заключалась в том, что я вручную подписался на Observable внутри моего файла компонента.

Обновление вручную выглядит следующим образом:

.subscribe(slides => {this.carousels = slides})

Оказывается, это уже сделано автоматически, поэтому мне не нужно было бы делать это снова вручную. Обратитесь к этому сообщению: Pipe Async - Ошибка при попытке diff '[object Object]'. Разрешены только массивы и итерации

Это исправило проблему для меня.

0 голосов
/ 21 октября 2019

.updateOne ({}) не возвращает список объектов, но объект с обновленной информацией о строке.

Вы возвращаете этот объект из APIи затем установите его в updateSlider () в вашем компоненте, где вы должны вместо этого установить массив.

Попробуйте записать результаты в API или слайды в подписке, и вы должны увидеть проблему.

...