json - 在 Angular 6 的组件中处理来自 observable 的数据
问题描述
我不确定我是否正确地表达了这个问题,所以我为笨拙的措辞道歉。我对 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 之前,我想简单地弄清楚如何显示我仍然无法做到的数据,这让我发疯了。预先感谢您的帮助。
解决方案
您的返回 JSON 是一个对象,其中包含保存所需数组数据的field
帖子,因此只需从服务器响应中获取字段并呈现此类帖子数组。像这样的东西:posts
ngOnInit() {
this.postService.getPosts()
.subscribe(data => this.posts = data.posts);
}
为了更好地键入,您始终可以指定变量类型,即public posts: Post[]
,您将在编码时进行类型检查。
推荐阅读
- mongoose - 当我使用 mongoose .populate.exec 方法时,Model.findById 返回 undefined
- java - ViewModelProvider Fragment 实例化模型
- django - 在 Django 中,从 UpdateView 或 ListView 创建对象的完整副本
- azure - Jira:编辑问题>源表中的流项目字段
- javascript - 是否可以在 Google Apps 脚本中将每个函数都写为“纯函数”?
- javascript - 在 Javascript 中动态创建表单无法在 PHP 上找到 POST 变量
- linux - 无法为 AWUS036ACH 制作驱动程序
- python - 在python中导入时安装panda后错误:模块'os'没有属性'add_dll_directory'
- javascript - Javascript/CSS - 由滚动高度定义的宽度收缩率
- ios - 如何从 Swift 中的观察对象中提取字符串值