@Artem0071
Безработный mr. Junior

Как перебрать массив объекта?

Добрый день!

В компоненте есть объект Blog

В хтмл вывод:
<div *ngFor="let oneBlog of Blog.Blog">
    <p>Опубликовано - {{oneBlog.Release}}</p>
</div>

Все работает отлично. Но это не работает, если в Blog только один элемент.
Как мне вывести только один элемент?
Пробывал вот так:
<div>
    <p>Опубликовано - {{Blog.Blog[0].Release}}</p>
</div>

Но выводит ошибку:
EXCEPTION: Uncaught (in promise): Error: Error in http://localhost:3000/app/pages/post/post.component.html:8:27 caused by: undefined is not an object (evaluating 'self.context.Blog.Blog')


Blog в первом варианте:
92d8f3b5d21f4790b3e073d11fae9ef8.png
Blog во втором варианте:
be22e0a477754c8db07cac66e3ff0d9a.png

Сам компонент:
import { Component, OnInit} from '@angular/core';
import { ActivatedRoute} from '@angular/router';
import { Response} from '@angular/http';
import { HttpService} from '../../services/http.service';

@Component({
    moduleId: module.id,
    selector: 'post-app',
    templateUrl: 'post.component.html',
    providers: [HttpService]
})
export class PostComponent implements OnInit {
    Blog = [];
    id;
    constructor(private activateRoute: ActivatedRoute,private httpService: HttpService){
        this.id = activateRoute.snapshot.params['id'];
    }

    ngOnInit(){
        this.httpService.getOnePost(this.id).subscribe((data: Response) => this.Blog=data.json());
    }
}


ДОПОЛНЕНИЕ

Я в хтмл добавил кнопку:
<button (click)="testMe()">Test</button>
И в компонент прописал:
testMe(){
        console.log(this.Blog.Blog.Release);
    }


И вот если нажать кнопку, то выводит в консоль верную дату. Но при этом в хтмл выводит ошибку
  • Вопрос задан
  • 1379 просмотров
Пригласить эксперта
Ответы на вопрос 4
Я бы template оставил как есть (с Array), а в контроллере сделал так:
if(!Array.isArray(Blog)) Blog = [Blog];

А вообще, если есть доступ к бэкенду, то переделал, чтобы метод вместо Blog возвращал Blogs, когда их много
Ответ написан
Комментировать
alexiusp
@alexiusp
senior frontend developer
Необходимо немного больше данных. Blog - это просто объект или Promise? Что такое Blog.Blog? Когда и как это свойство инициализируется?
Ответ написан
AlexanderBelov
@AlexanderBelov
Frontend developer
Если попробовать так?

<div *ngFor="let oneBlog of Blog.Blog">
    <p *ngIf="Blog.Blog?.length > 0">Опубликовано - {{oneBlog.Release}}</p>
</div>
Ответ написан
m0sk1t
@m0sk1t
SPA web-developer
У вас разные типы... В первом случае Blog это Array а во втором Object, на скриншотах же видно


Опубликовано - {{Blog.Blog[0].Release}}


Надо заменить на


Опубликовано - {{Blog.Blog.Release}}

Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы