Angularで以下のようなことがやりたいと思っています。
- あるボタンをクリック後、記事表示ページ(article.componentとします)を表示
- article.componentのngOnInitでサーバにgetで記事の情報をリクエスト。(非同期)
- レスポンスが返ってきた後、画面に記事の内容を表示
まず、最初は何も考えず、サーバにリクエストを投げる関数を作り、その関数をngOnInitで呼んでました。
この場合は初期表示時に、まだサーバからレスポンスが返ってきてないので画面に何も表示されませんでした。
次にサーバにリクエストを投げる関数の最後で@angular/routerのnavigateByUrlを使い、同画面を再表示するようにすることで、正しく記事の内容を表示できました。
しかし、何かこのやり方はダサく感じており、Angularのお作法的にはどうするのが正解なのか教えてください。
以下ソースコードです。
Angualr
1import { Component, OnInit } from '@angular/core'; 2import { ArticleService } from './article.service'; 3import { Article } from 'src/app/shared/models/article'; 4import { Router } from '@angular/router'; 5 6@Component({ 7 selector: 'app-article', 8 templateUrl: './article.component.html', 9 styleUrls: ['./article.component.scss'] 10}) 11export class ArticleComponent implements OnInit { 12 article: Article; 13 14 constructor(private articleService: ArticleService, 15 private router: Router) { } 16 17 ngOnInit() { 18 this.getArticle(1); 19 } 20 21 getArticle(articleId: number) { 22 this.articleService.getArticle(articleId).subscribe( 23 response => { 24 this.article = response; 25 this.router.navigateByUrl('/'); 26 } 27 ); 28 } 29}
回答2件
あなたの回答
tips
プレビュー