Angular 2 Не могу отобразить массив из GET-Request

Я пытаюсь отобразить массив, который я извлекаю из mongodb (Chrome networktool показывает, что я его получаю (ответ со статьями)). Я не получаю никаких ошибок, но статьи не отображаются в шаблоне.

Вот шаблон:

<div class="container-fluid">
    <div class="row">
        <div *ngIf="articles">
        <div class="col-lg-5 sm-12 m-6" *ngFor="let arts of articles">
         <div class="list-group ">
                <!--TODO: Link to ViewArticle-->
          <a href="#" class="list-group-item list-group-item-action felx-column
                 align-items-start active">
                 <div class="d-flex w-100 justify-content-between">
                    <h5 class="mb-1">{{arts.headline}}</h5>
                    <small>{{arts.updated_at}}</small>
                    </div>
                    <p class="mb-1">{{arts.textarea}}</p>
  <small class="text-muted mutedText">
                    MutedText.MutedText.MutedText.</small>
                    </a>
            </div>
            </div>
        </div>
    </div>
</div>

Метод getArticles() в Компоненте: объявлен массив статей!

getArticles():Promise<Article[]>{
        return this.articleService.getArticles()
                            .then(articles => this.articles = articles);
    }

И метод службы getArticles():

 getArticles(): Promise<Article[]>{

       return this.http.get(`${BASE_URI}${PATH_ARTICLES}`)
                    .toPromise()
                    .then((r: Response) => r.json().data as Article[])
                    .catch(this.handleError);

    }

Заранее спасибо, в инете ничего не нашел..


person Valentin    schedule 15.02.2017    source источник
comment
Можете ли вы увидеть соответствующие данные внутри вашего then() в вашем компоненте? Можете ли вы поставить console.log() перед тем, как назначить его this.articles?   -  person eko    schedule 15.02.2017
comment
Кроме того, еще один простой тест, чтобы увидеть, работает ли задание так, как задумано: просто поместите ‹p›{{articles}}‹/p› где-нибудь (не внутри *ngIf, конечно)   -  person dquijada    schedule 15.02.2017
comment
хорошо, после того, как я добавил console.log() к .then(), статьи отображаются в представлении.. как это могло быть?   -  person Valentin    schedule 15.02.2017


Ответы (1)


Однажды я задал аналогичный вопрос: ошибка пользовательского метода: не функция с ответом Гюнтера Цохбауэра:

«Если вы приводите JSON к классу TypeScript, все, что происходит, это то, что вы указываете статическому анализу, что он может безопасно принять значение этого класса, что на самом деле вообще не меняет значение JSON, а также не делает его экземпляр этого класса».

Ваша проблема здесь: .then((r: Response) => r.json().data as Article[]). Вы объявили их как массив Article, но это не так. Это будет работать, но на самом деле они (поправьте меня, если я ошибаюсь. Для меня это тоже новая тема) простые объекты.

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

person SovietPanda    schedule 15.02.2017
comment
Я скопировал блок .then() из Tour of Heroes из Angular, но соглашусь - person Valentin; 15.02.2017