Не удается скопировать содержимое одного массива в другой в Angular 5 - PullRequest
0 голосов
/ 25 мая 2018

У меня есть пустой массив, определенный в моем компоненте следующим образом:

private dtoList=[];

Я вызываю службу с HttpClient для получения данных из возвращаемого бэкэнда и объекта, содержащего список:

    this.appService.getData()
        .subscribe((response) => {
          let value = response;
            //1st way
          this.dtoList = response['dtoList'];
          console.log(this.dtoList)
          //2nd way
          this.dtoList = cloneDeep(response['dtoList']);
          console.log(this.dtoList)
   });

Ответ, полученный в поле значения:

Object {success: false, description: null, dtoList: Array(2), status: null}

Список, полученный в объекте ответа, не копируется в целевой список.Список целей всегда отображается как неопределенный.

Любая помощь приветствуется.

Ответы [ 5 ]

0 голосов
/ 28 мая 2018

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

this.myService.getData().subscribe((response) => {
        let values = response['dtoList'];
        this.copyValues(values);
});

// the copyvalues method

copyValues(list) {
    this.dtoList = list;
}
0 голосов
/ 25 мая 2018

Попробуйте, пожалуйста, таким образом.Создайте class(model) для элемента списка результатов, установите общий тип Observable для метода getData.

service.ts

@Injectable()
export class AppService {

  constructor(private http: HttpClient) { }

  getData(): Observable<ResultModel> {
    return this.http.get<ResultModel>('url for api');
  }

}

export class ResultModel {
  id: number;
  title: string;
}

.тс

private dtoList: ResultModel[] = [];
 this.appService.getData()
    .subscribe((response) => {
        this.dtoList = response;
        // if here you want copy array, you can use spread operator
        // this.dtoList = [...response];
     });
0 голосов
/ 25 мая 2018

Попробуйте, используя JSON.parse(JSON.stringify(obj)), чтобы клонировать ваши объекты в массиве

this.appService.getData()
        .subscribe((response) => {
          response['dtoList'].forEach((obj, index) => this.dtoList[index] = JSON.parse(JSON.stringify(obj)));
          console.log(this.dtoList)
});
0 голосов
/ 25 мая 2018
your declaration is wrong for private dtoList=[]; 

declare like  dtoList:any=[]; than assign object like below
 constructor(){
    this.dtoList={success: false, description: null, dtoList: ['dat1','data2'], status: null}
    console.log(this.dtoList);
    console.log(this.dtoList.dtoList);
  }
0 голосов
/ 25 мая 2018

Попробуйте это

response['dtoList'].forEach(element=>{ this.dtoList.push(element); });

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...