Angular 2 Observable订阅参数和服务错误

用户名

我遇到了一个关于Observable的问题,它同时订阅了路由参数和服务(在我看来)。我在视图上看到错误

无法读取未定义的属性“帖子”

虽然我可以记录帖子数据。请帮助我解决此问题。提前致谢!

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');
  }
}
哈里·宁(Harry Ninh)

在从异步可观察对象返回任何值之前,将启动视图。就您而言,当您CategoryComponent被解雇时,categoryPostsundefined就在那时,您的视图还请求undefined渲染属性的数据

解决方案:您需要确保categoryPosts仅当您要显示以下内容时,才考虑那些需要您的DOM

<ul *ngIf="categoryPosts && categoryPosts.posts">
  <li *ngFor"let post of categoryPosts.posts">
    {{ post.title }}
    {{ post.body }}
  </li>
</ul>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

分段文件上传和服务:Angular 2

来自分类Dev

Angular 2 Observable订阅不起作用

来自分类Dev

Angular2-订阅服务变量更改

来自分类Dev

Angular 2:指令订阅服务的 Observables

来自分类Dev

订阅时出现Angular2错误

来自分类Dev

订阅Angular 2

来自分类Dev

Angular2服务订阅不起作用

来自分类Dev

Angular2-订阅服务数据中的更改

来自分类Dev

向服务订阅多个Angular2组件

来自分类Dev

服务订阅通过OnInit在[Angular 2]中启动多个时间

来自分类Dev

订阅Angular 2中的ActivatedRoute参数不会更新视图模板

来自分类Dev

Angular HttpClient 和服务

来自分类Dev

Angular2中的HTTP服务错误

来自分类Dev

Angular 2 http 服务错误处理

来自分类Dev

Angular 2 @Output参数

来自分类Dev

angular 4 材料、输入字段和服务通信错误

来自分类Dev

Angular 2 错误:(SystemJS)无法解析组件服务的所有参数:(?)

来自分类Dev

订阅TypeScript Angular 2响应

来自分类Dev

Angular 2订阅未执行

来自分类Dev

Angular 2 订阅的替代方案

来自分类Dev

Angular2 Observable BehaviorSubject服务无法正常工作

来自分类Dev

Angular 2 订阅订阅另一个异步函数的服务

来自分类Dev

Angular 2中的嵌套Observable

来自分类Dev

Angular 订阅 HTTPClient Observable,错误 req.url.toLowerCase is not a function

来自分类Dev

使用Observable的Angular2 HTTP订阅显示未定义的数据

来自分类Dev

Angular2/4 在永远不会被销毁的组件中取消订阅 observable

来自分类Dev

如何测试Angular 2服务?

来自分类Dev

Angular 2,使数据停止服务

来自分类Dev

Angular2:注入服务