在通过angular2的git存储库之后,经过长时间搜索堆栈溢出后,我需要了解两件事。 1)第一个是为什么我有这种类型的异常,我的.ts文件是这些:
import { Injectable } from '@angular/core'
import { Headers,Http,Response } from '@angular/http'
import { Observable } from 'rxjs/Observable'
import { Result } from '../components/downloads/documents/result'
import 'rxjs/add/operator/catch'
import 'rxjs/add/operator/map'
import 'rxjs/add/observable/throw'
@Injectable()
export class DownloadDocumentsService{
constructor(private http:Http){}
private url='http://someplace/;
getResults(): Observable<Result[]>{
return this.http.get(this.url)
.map(this.extractData)
.catch(this.handleError);
}
private extractData(res: Response) {
let body = res.json();
return body.data || { };
}
private handleError (error: any) {
let errMsg = (error.message) ? error.message :
error.status ? `${error.status} - ${error.statusText}` :'Server error';
console.error(errMsg); // log to console instead
return Observable.throw(errMsg);
}
}
并将服务注入此组件
import { Component,OnInit,Input } from '@angular/core'
import { Result } from './documents/result'
import { ResultComponent } from './documents/result.component'
import { DownloadDocumentsService } from '../../services/DownloadDocumentsService.service'
@Component({
selector:'documents-download',
templateUrl:'app/components/downloads/documentsArea.component.html',
styleUrls:['app/components/downloads/documentsArea.component.css'],
directives:[ResultComponent,DownloadDocumentService]
})
export class DocumentsAreaComponent implements OnInit{
documentsList: Result[];
errore: string;
private document:Result;
mode='Observable'
constructor(private downloadDocumentService: DownloadDocumentService){}
getDocuments(){
this.downloadDocumentService.getResults()
.subscribe(
documentsList=>this.documentsList=documentsList,
error => this.errore=<any>error
)
}
ngOnInit(){
this.getDocuments();
}
}
我得到的例外就是这个
错误:未捕获(在承诺中):在DownloadDocumentsService上找不到指令注释
2)如何记录角度2引发的可能异常?我是angular 2的新手(正如你从代码中看到的那样,实际上.ts文件的大部分内容包含开发人员指南中给出的相同代码,来自'HTTP客户端'一章)但对我来说错误信息是我得到的是非常通用的(我认为),因为我明白这意味着'DownloadDocumentsService缺少使它成为指令'的东西?!?即使这不是这个错误的真正含义,大多数人以非常不同的方式解决了这个问题,让我清楚地知道我不理解这个例外。那么这个错误的真正含义是什么?我什么时候可以调试它?
答案 0 :(得分:2)
必须在组件的DownloadDocumentService
属性中指定providers
服务,而不是directives
。后者仅适用于指令/组件。
以下是一个示例:
directives: [ResultComponent],
providers: [DownloadDocumentService]
要使用,directives
属性中提供的类需要@Directive
或@Component
装饰器来设置配置元数据。此级别不支持简单类。 @Injectable
装饰器不提供类似的东西,并且“仅”能够将依赖项注入类......