【问题标题】:Working with data from observable in a component in Angular 6在 Angular 6 的组件中处理来自 observable 的数据
【发布时间】:2018-05-23 01:07:02
【问题描述】:

我不确定我是否正确地表达了这个问题,所以我为笨拙的措辞道歉。我对 Angular 比较陌生,但对发出 HTTP 请求和在其他框架(如 VueJS)中处理数据非常满意。我开始了解 angular 使用的 Observables。我正在尝试制作一个博客应用程序,并且有一个快速后端,其中包含用于博客帖子的 JSON

在我的 post.service.ts 我有:

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable, of } from 'rxjs';

import { Post } from '../post';

@Injectable({
  providedIn: 'root'
})

export class PostService {

  private apiUrl = 'http://localhost:8081/posts';

  getPosts(): Observable<Post[]> {
    return this.http.get<Post[]>(this.apiUrl);
  }

constructor( private http: HttpClient,
  private postService: PostService ) { }

}

然后我想列出我 post-list.component.ts 中的所有帖子:

import { Component, OnInit } from '@angular/core';
import { PostService } from '../../services/post.service'
import { Post } from '../../post';


@Component({
  selector: 'app-post-list',
  templateUrl: './post-list.component.html',
  styleUrls: ['./post-list.component.css']
})

export class PostListComponent implements OnInit {

  public posts = [];

  constructor(private postService: PostService) {  }

  ngOnInit() {
    this.postService.getPosts()
      .subscribe(data => this.posts = data);
  }
}

但是帖子数组变成了一个对象,我不确定如何将它用作数组。如果我尝试使用 *ngFor 方法,我会收到错误消息。如果我将{{posts}} 放在 html 中,页面会显示 [object Object]。如果我这样做{{posts | json}},它会显示实际的JSON,但我仍然无法遍历它。

这是 json 的样子:

{
    "posts": [
    {
        "_id": "5b04b269fde3ca29b35ffc3e",
        "name": "Mike",
        "title": "Stuff",
        "post": "This is a post about stuff"
    },
    {
        "_id": "5b04b24dfde3ca29b35ffc3d",
        "name": "OtherUser",
        "title": "New Post Test",
        "post": "This is a test post"
    },
    {
        "_id": "5b02ed783aa641758c08e601",
        "name": "Emerjawn",
        "title": "Post"
    }
    ]
}

在我尝试为此应用程序设置 CRUD 之前,我想简单地弄清楚如何显示我仍然无法做到的数据,这让我发疯了。提前感谢您的帮助。

【问题讨论】:

  • 试试this.posts = data.posts

标签: json angular http crud angular2-observables


【解决方案1】:

您的返回 JSON 是一个对象,其中有 field posts 保存您需要的 数组数据 所以只需从您的服务器响应中获取 posts 字段并呈现这样的数组帖子。像这样:

ngOnInit() {
    this.postService.getPosts()
      .subscribe(data => this.posts = data.posts);
  }

为了更好地键入,您始终可以指定变量类型,即public posts: Post[],然后您将在编码时进行类型检查。

【讨论】:

  • 感谢您的回复!不幸的是,将帖子更改为 data.posts 会出现错误,` 类型 'Post[]' 上不存在属性 'posts'。" `
  • 该错误是类型检查的一部分。如您所知并确保响应数据是 Post 类型的数组,那么您可以 cast 这种类型的数据。像这样:data => this posts = data.posts
  • 不,当前输入的问题是http请求响应已经错误输入到Post[]。
  • @IngoBürk 这解决了它,谢谢!我将 getPosts() 函数中的 Observable 更改为键入 。我想知道使用 observable 是否有任何意义,据我所知,它只是新版本的 Angular 使用的东西(我正在使用 Angular 6)。
  • @E.Max I 因为您的 http 请求本质上是异步,因此需要 Observable 实现。
猜你喜欢
  • 2020-10-16
  • 2021-08-03
  • 2019-05-06
  • 2017-10-12
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-19
相关资源
最近更新 更多