1

Имеется глобальный сервис, внутри которого хранятся переменные и методы. Если проверить отдельные переменные (массивы), то они отображаются в консоли. Но среди всех переменных есть два массива (parts и categories), которые не отображаются отдельно (показывает пустой массив). При этом если проверить содержимое всего сервиса через console.log можно увидеть всё, что есть внутри (в том числе и те массивы, которые по отдельности не отображаются).

введите сюда описание изображения

Вот код сервиса:

import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';

@Injectable({ providedIn: 'root' }) export class GlobalSeviceService { animals: Animal[] = []; genders: Gender[] = []; myAnimal: MyAnimal = {animal_id: 0, gender_id: 0}; menu_items: Menu[] = []; categories: Category[] = []; parts: Part[] = []; actual_categ_id: number; non_changeable_parts_svg = []; constructor_resp: any; constructor(public http: HttpClient) { } transferGenderId(b){ this.myAnimal.gender_id = b; }

transferConstructorData(anim_id, gender_id){ this.http.get<Category[]>('http://localhost:8000/constructor_page?anim_id=' + anim_id + "&gender_id=" + gender_id) .subscribe(response => { this.constructor_resp = response; this.categories = this.constructor_resp.constructor_page['categ_parts']; this.parts = this.constructor_resp.constructor_page['parts']; let j; let i = 0; for (j in this.categories) { if (this.categories[j].changeable){ i ++; if (i === 1){ this.categories[j].css_categ_active = true; } else { this.categories[j].css_categ_active = false; } } } }); }

}

Пробую выводить в консоли внутри компонента:

import {Component, OnInit} from '@angular/core';
import { PetComponent } from '../pet/pet.component';
import {GlobalSeviceService, Part} from '../services/global-sevice.service';

@Component({ selector: 'app-constructor-page', templateUrl: './constructor-page.component.html', styleUrls: ['./constructor-page.component.scss'] }) export class ConstructorPageComponent implements OnInit {

constructor( public globalService: GlobalSeviceService) { }

ngOnInit(): void { } ngAfterViewInit() { console.log(this.globalService.parts); console.log(this.globalService); } }

anim_id и gender_id берутся от выбора пользователя.

В общем, если у вас есть предположение, почему не отображаются массивы в консоли, буду признателен за помощь.

  • Возле объекта в консоли есть буква i в синем квадрате, прочитайте, что там написано – vp_arth Oct 28 '20 at 12:30

1 Answers1

0
//this.parts = this.constructor_resp.constructor_page['parts'];
this.parts.push.apply(this.parts, this.constructor_resp.constructor_page['parts']);
  • Спасибо. Это сработало. – Kazarinov Yanek Oct 28 '20 at 13:05
  • @KazarinovYanek Пожалуйста. Успехов. Надеюсь, понятно - почему. Знак "галочка" - слева от ответа. –  Oct 28 '20 at 13:06
  • Но при этом если я сделаю console.log(this.globalService.parts.length); то будет показан 0 (нуль). как взять длину массива в этом случае? Я имею ввиду, что массив в консоли тепеь есть, но его длина почему то все равно нулевая – Kazarinov Yanek Oct 28 '20 at 13:12
  • @KazarinovYanek Длина массива выводится нулевая в момент вызова console.log(...length);, потому что в консоль просто пишется число. При вызове console.log(this.globalService.parts); консоль запоминает ссылку на массив и показывает его текущее (обновленное) состояние уже после того, как в массив были добавлены элементы. –  Oct 28 '20 at 13:38