我正在构建一个Angular 2应用程序,它使用服务来收集数据.
该服务确实包含以下逻辑:
该服务确实包含以下逻辑:
/* ========== CORE COMPONENTS ========== */ import { Injectable } from '@angular/core'; import { Http,Response } from '@angular/http'; import { Observable } from 'rxjs/Observable'; import 'rxjs/Rx'; import 'rxjs/add/operator/map'; import 'rxjs/add/operator/catch'; /* ========== MODELS ========== */ import { IApplicationViewModel } from './models/application.model'; /* ========== CONSTANTS ========== */ import { LogzillaServerConfiguration } from '../../app.configuration'; @Injectable() export class ApplicationService { private getAllEndpoint = LogzillaServerConfiguration.host + '/api/administration/application/getAll'; // Initializes a new instance of the 'ApplicationService'. constructor(private http: Http) { } // Get all the 'logzilla' applications. getApplications(): Observable<IApplicationViewModel[]> { return this.http.get(this.getAllEndpoint) .map((response: Response) => <IApplicationViewModel[]>response.json().model) .catch(this.handleError); } // Handle an error that occured while retrieving the data. // This method will throw an error to the calling code. private handleError(error: Response) { return Observable.empty(); } }
该服务的作用是从端点检索数据,并将其映射到模型,当发生错误时,我返回一个空的Observable.
我还有一个解析器,用于在更改活动路由之前从服务加载数据.
此解析程序包含以下逻辑:
/* ========== CORE COMPONENTS ========== */ import { Injectable } from '@angular/core'; import { Resolve,ActivatedRouteSnapshot } from '@angular/router'; /* ========== APPLICATION SERVICES ========== */ import { ApplicationService } from './application.service'; /* ========== MODELS ========== */ import { IApplicationViewModel } from './models/application.model'; import { IApplicationLogLevel } from './models/applicationLevel.model'; // Defines the 'resolver' which is used to resolve the applications. @Injectable() export class ApplicationResolver implements Resolve<IApplicationViewModel[]> { // Initializes a new instance of the 'ApplicationResolver'. constructor(private applicationService: ApplicationService) { } // Get all the registered applications. resolve(route: ActivatedRouteSnapshot) { return this.applicationService.getApplications(); } }
我的路线的定义是:
{ path: 'applications',component: ApplicationComponent,pathMatch: 'full',resolve: { application: ApplicationResolver }},
但是,当我浏览到/ applications时,我遇到了一个错误Uncaught(在promise中):错误:序列中没有元素..
编辑:添加组件
@Component({ selector: 'logzilla-applications',templateUrl: './src/app/pages/applications/application.template.html' }) @Injectable() export class ApplicationComponent implements OnInit { hasApplications: boolean; applications: IApplicationViewModel[]; errorMessage: string; // Initializes a new instance of the 'ApplicationComponent'. constructor (private route: ActivatedRoute) { console.log('I am here.'); } // This method is executed when the component is loaded. ngOnInit() { }
我的组件的构造函数不是调用的事件.
如何解决这个问题.
亲切的问候,
用Observable.of([])替换Observable.empty(). over empty for the empty是官方Angular
Tour of Heroes教程用来返回空的observable,并且是我在所有应用程序中使用的内容.
它们之间的区别似乎是返回任何内容,还是空数组.
来自官方rxjs文档:
Creates an Observable that emits no items to the Observer and immediately emits a complete notification.
Creates an Observable that emits some values you specify as arguments,immediately one after the other,and then emits a complete notification.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。