如何在Angular中从ID显示JSON对象(七)

Posted

技术标签:

【中文标题】如何在Angular中从ID显示JSON对象(七)【英文标题】:How to display JSON object from ID in Angular (7) 【发布时间】:2019-10-29 00:21:51 【问题描述】:

我正在尝试创建一个有点像博客的 CRUD 应用程序。我的所有创建、读取、更新和删除功能都在工作。我只想显示一个对象的数据 (例如:标题,描述) 基于作为路径一部分的对象的 ID (localhost:4200/route/0).

我可以使用<input [(ngModel)]"articles.title"> 以我想要的方式显示数据,但不能在<h1> 或任何其他标签上使用ngFor

app-routing-module.ts

 path: 'article/:id', component: ArticleComponent

db.json

"articleInfo": [
    
      "id": 0,
      "title": "Marinara Pasta",
      "category": "Italian",
      "author": "Sample",
      "date": "06/11/2019",
      "description": "A classic Italian dish. Quick, easy, and ready to eat in only 15 minutes.",
      "image": "/assets/sample.png"
    
]

data.service.ts

baseUrl:string = "http://localhost:3000";

getData(id: number): Observable<Data> 
  return this.http.get<Data>(this.baseUrl + '/articleInfo/' + id)

article.component.ts

export class ArticleComponent implements OnInit 

  id = this.actRoute.snapshot.params['id'];
  articles: any = [];

  constructor(private dataService: DataService, public actRoute: ActivatedRoute, public router: Router)  
  loadIdData() 
    return this.dataService.getData(this.id).subscribe(data => 
      this.articles = data;
    )
  

  ngOnInit() 
    this.loadIdData();
  


article.component.html

<div *ngFor="let info of articles">
      <h2> info.title </h2>
      <h6> info.description</h6>
</div>

我在 ArticleComponent.ngfactory.js 中得到 ERROR 和 ERROR CONTEXT。

【问题讨论】:

【参考方案1】:

您可以将您的 article.component.ts 更新为:

export class ArticleComponent implements OnInit 
  id;
  articles: Observable<any[]>;

  constructor(private dataService: DataService, public actRoute: ActivatedRoute, public router: Router)  

  ngOnInit() 
    this.id = this.actRoute.snapshot.params['id']
    this.loadIdData();
  

  loadIdData() 
    this.articles = this.dataService.getData(this.id);
  


和 article.component.html 到:

<div *ngFor="let info of articles | async">
  <h2> info.title </h2>
  <h6> info.description</h6>
</div>

问题似乎与您声明 id 属性的方式有关 - actRoute 仅在 constructor 运行后定义,这发生在访问类的属性之后。 因此,当您的 loadIdData 函数运行时,this.id 可能是未定义的。欲了解更多信息,请参阅Angular Lifecycle Docs

注意:| async 只是一些糖,并不是真正需要的。您可以保留您的代码,只需更新constructorngOnInit 中的id 值。 这是article explaining the async pipe

【讨论】:

您好,感谢您的回复。不幸的是,这并没有解决我的问题。在我的原始代码中,我可以使用&lt;input [(ngModel)]="articles.title"&gt; 显示正确的数据。您更新的代码没有显示任何带有 ngFor 或 ngModel 的内容。问题可能是别的吗?【参考方案2】:

弄清楚我哪里出错了。 ngFor 不是显示一组数据的正确方式。它需要多个集合,因此不会在页面上显示任何内容。对我有用的是从我的article.component.ts 中的articles: any = []; 中提取信息,如下所示:

<h1> articles.id </h1>
<h2> articles.title </h2>
<h6> articles.description </h6>

如需更好地解释此功能的原因,请参阅angular.io documentation on displaying data。

【讨论】:

以上是关于如何在Angular中从ID显示JSON对象(七)的主要内容,如果未能解决你的问题,请参考以下文章

在 Angular 中从 nodejs 获取 JSON

我们如何在 Flutter 中从 JSON 对象中获取特定数据?

如何在 Angular 7 中从 JSON 生成 HTML FORM

如何在Angular 8中从http客户端传递带有查询对象的数组

(IONIC - Angular)我如何在 html 卡片中仅显示符合特定条件的 JSON 中的某些对象?

在 C# 中从 json 中创建动态对象