Pu sh не является функцией - PullRequest
0 голосов
/ 01 августа 2020

Я получаю сообщение об ошибке

this.items.pu sh не является функцией

Из Google я обнаружил, что это означает, что элементы не являются массивом. Я попытался учесть это, проверив, не определено ли оно, и использовал this.items = this.items || []; Я также пытался изменить данные и превратить их в массив, но когда я заключаю данные в квадратные скобки, к элементам ничего не добавляется. я его развернул. Когда я нахожусь в режиме разработки, в консоли разработчика не появляются ошибки.

items = [];
storageKey = 'MyDataStorageKey';

public onSubmit(thumbnail, quantity, product_name, product_price){

var data = {
   thumbnail,
   quantity,
   product_name,
   product_price
};

this.items = this.items || [];
if (typeof this.items !== 'undefined')
this.items.push(data);
localStorage.setItem(this.storageKey, JSON.stringify(this.items));
this.isSubmitted = true;
}
ngOnInit(): void {
   this.items = this.getStorageItems();
 }

Я также получаю сообщение об ошибке: не удается найти другой поддерживающий объект '[object Object]' типа 'object'. NgFor поддерживает привязку только к Iterables, таким как массивы. Я получаю следующее сообщение об ошибке:

<tr *ngFor="let item of items">
<td>
<td><img src="../assets/images/gallery/{{item.thumbnail}}" /></td>
<td>{{item.quantity}} </td>
<td>{{item.product_name }}</td>
<td>{{item.product_price }} </td>
</tr>

Ответы [ 2 ]

0 голосов
/ 01 августа 2020

Вы получаете эту ошибку, потому что items не является массивом, а ngFor ожидает итеративный объект. Лучше проверить тип элементов с помощью функции isArray () перед тем, как преобразовать sh элементы в объект items.

if (Array.isArray(this.items))
0 голосов
/ 01 августа 2020

Я бы не знал, что в первую очередь вызывает проблему или как ее правильно решить, я боюсь (вы правы, хотя, судя по виду ошибки, похоже, что вы не получаете массив с this.items в производстве)

Однако я заметил одну вещь: вы проверяете строку "undefined" вместо undefined. Однако я считаю, что вместо того, чтобы проверять, не является ли то, что вы получаете, неопределенным, лучше проверить, действительно ли то, что вы получаете, является массивом? Чтобы проверить, является ли что-то массивом или нет, вы можете использовать метод Array.isArray(). Так что, возможно, переписывание вашего условия может помочь, пока вы не выясните, в чем root причина проблемы:

if (Array.isArray(this.items))
  this.items.push(data);
  localStorage.setItem(this.storageKey, JSON.stringify(this.items));
  this.isSubmitted = true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...