как подтолкнуть массив в массиве в угловых? - PullRequest
0 голосов
/ 30 ноября 2018

Здесь я положил все консоли и код ниже.Я хочу нажать массив внутри массива, напр.В imagesArray есть 3 массива, и теперь я помещаю массив результатов, который имеет 2 массива, поэтому первый массив правильно помещается в imagesArray, но последний массив показывает неопределенный, а не выдаваемый, и выдает ошибку, подобную imageArray undefined, как это сделать?(Я поставил консоли и коды ниже)

Перед нажатием консоли объекта imagesArray

enter image description here

результат, который я хочу нажать result

enter image description here

после нажатия консоли выглядит так

enter image description here

add-folder.component.ts

imagesArray : UploadedImages[] = [];

dialogRef.afterClosed().subscribe(result => {
  if(result != '' && result != undefined && result != null){
    for(var i = 1; i <= result.length ; i++){
      this.imagesArray.push(result[i]);
    }
  } 
});

add-folder.component.html

<div>
  <mat-card *ngFor="let images of imagesArray" style="height : 100px;width : 100px">
    <b>{{images.imageName}}</b> 
    <b>{{images.filesize}}</b>
  </mat-card>
</div>

Ответы [ 4 ]

0 голосов
/ 30 ноября 2018

Длина списка будет возвращать 2, а индекс массива начинается с 0, поэтому result.length - 1.

Таким образом, вы можете сделать так:

Изменить:

var i = 0; // Start from zero because arrays are starts from `0` so we can access the first item as list[0]

И

result.length - 1; // Subtract 1 from length of list

Код после применения изменения:

dialogRef.afterClosed().subscribe(result => {
  if(result != '' && result != undefined && result != null){
    for(var i = 0; i <= result.length - 1; i++){
      this.imagesArray.push(result[i]);
    }
  } 
});

Вы можете сделать это, не вычитая -1 из длины, просто изменитепараметр условия для i < result.length как:

dialogRef.afterClosed().subscribe(result => {
  if(result != '' && result != undefined && result != null){
    for(var i = 0; i < result.length; i++){
      this.imagesArray.push(result[i]);
    }
  } 
});

Пример StackBlitz

0 голосов
/ 30 ноября 2018

В вашем массиве есть значение undefined после нажатия всех значений.установите массив пустым в каждой подписке, а затем нажмите, чтобы избежать нулевых значений.

dialogRef.afterClosed().subscribe(result => {
  this.imagesArray = [];
  if(result != '' && result != undefined && result != null){
    for(var i = 0; i <= result.length ; i++){
      this.imagesArray.push(result[i]);
    }
  } 
});

Также используйте дополнительный оператор, чтобы дважды проверить, не является ли элемент массива undefinec.

<b>{{images?.imageName}}</b> 
<b>{{images?.filesize}}</b>
0 голосов
/ 30 ноября 2018

В этом коде

imagesArray : UploadedImages[] = [];

dialogRef.afterClosed().subscribe(result => {
    if(result != '' && result != undefined && result != null){
         for(var i = 1; i <= result.length ; i++){
             this.imagesArray.push(result[i]);
         }
    } 
});

Вы начинаете array с позиции 1. Массивы начинаются с 0. Итак, в вашем массиве 2 элемента, [element1, element2].Ваш код сначала получит номер позиции 1 (element2) и вставит в другой array.

. И следующая итерация, i будет равна 2, что равно result.length,this.imagesArray.push(result[i]); попытается получить позицию 2, которая не существует, и вставит неопределенное значение в imagesArray.

Измените ваш код на:

for(var i = 0; i < result.length ; i++){
    this.imagesArray.push(result[i]);
}
0 голосов
/ 30 ноября 2018

Вы инициализируете переменную цикла, i, 1, result должен иметь индекс на основе 0, что означает, что вы должны сделать i = 0 и использовать меньше (<) вместоменьше или равно (<=)

Вот почему вы получаете неопределенное значение как последний объект, добавленный в массив

imagesArray : UploadedImages[] = [];

dialogRef.afterClosed().subscribe(result => {
  if(result != '' && result != undefined && result != null){
    for(var i = 0; i < result.length ; i++){
      this.imagesArray.push(result[i]);
    }
  } 
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...