0
Observableに関する問題が発生しましたが、これはルートパラメータとサービスの両方を購読しています(私の意見では)。私はポストのデータをログに記録することができますが、未定義角度2観測可能なサブスクリプションのパラメータとサービスのエラー
のプロパティ「ポスト」を読み込めませんビュー
上のエラーを見ています。この問題を解決するのを手伝ってください。前もって感謝します!category.component.ts
@Component({ // moduleId: module.id, selector: 'category', templateUrl: 'category.component.html', providers: [HTTP_PROVIDERS], directives: [ROUTER_DIRECTIVES] }) export class CategoryComponent implements OnInit { private category: string; private type: string; private paramsSub: any; categoryPosts: CategoryPosts; constructor( private route: ActivatedRoute, private categoryService: CategoryService ) {} ngOnInit() { this.paramsSub = this.route.params.subscribe(params => { this.category = params['category']; this.type = params['type']; this.categoryService.getPostInCategory(this.category, this.type) .subscribe((categoryPosts: CategoryPosts) => { this.categoryPosts = categoryPosts; console.log(this.categoryPosts.posts) // can print the data }, error => { console.log(error); }); }); } // ngOnDestroy(){ // this.paramsSub.unsubscribe(); // } }
category.component.html
<ul> <li *ngFor"let post of categoryPosts.posts | async"> {{ post.title }} {{ post.body }} </li> </ul>
category.services.ts
import { Injectable } from '@angular/core'; import { Http, Response } from '@angular/http'; import { Observable } from 'rxjs/Observable'; import 'rxjs/add/operator/map'; import 'rxjs/add/operator/catch'; import { CategoryPosts } from './index'; import * as global from '../shared/global/globals'; @Injectable() export class CategoryService { private _baseUrl: string = ''; constructor(private http: Http) { this._baseUrl = global.BASE_URL; } getPostInCategory(category: string, type: string) : Observable<CategoryPosts>{ return this.http.get(this._baseUrl + 'category/' + category + '/' + type) .map((res: Response) => { return res.json(); }) .catch(this.handleError); } private handleError(error: any) { var applicationError = error.headers.get('Application-Error'); var serverError = error.json(); var modelStateErrors: string = ''; if (!serverError.type) { console.log(serverError); for (var key in serverError) { if (serverError[key]) modelStateErrors += serverError[key] + '\n'; } } modelStateErrors = modelStateErrors = '' ? null : modelStateErrors; return Observable.throw(applicationError || modelStateErrors || 'Server error'); } }
ビューがロードする前に次に、どのように私はポストを開始することができますか?私の場合は、アカウントに属していない特定のカテゴリのすべての投稿を誰もが見られるようにしたいのです。 – user3027246
さて、あなたはそうする必要はありません。 '* ngIf'はあなたのデータが利用可能になるとすぐにDOMを作成します。 –
* ngIfを使用するとエラーは発生しませんが、ポストはまだビュー内でレンダリングされません。私は私の質問でサービスを更新しました – user3027246