NTN*_*AVA 4 angular2-services angular
我试图将一个自定义服务(MessageService)注入另一个自定义服务(ItemService).它抛出一个错误MessageService在ItemService中被取消.
但是服务(MessageService和ItemService)都可以正常使用组件.
mani.ts
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app.module';
const platform = platformBrowserDynamic();
platform.bootstrapModule(AppModule);
Run Code Online (Sandbox Code Playgroud)
app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { AppComponent } from './app.component';
import { routing, routedComponents } from './app.routing';
import { ItemService } from './services/item.service';
import { MessageService } from './services/message.service';
import './rxjs-extensions';
@NgModule({
imports:
[ BrowserModule,
routing,
FormsModule,
ReactiveFormsModule,
HttpModule,
],
declarations: [ AppComponent, routedComponents],
providers: [
MessageService,ItemService
],
bootstrap: [ AppComponent ]
})
export class AppModule { }
Run Code Online (Sandbox Code Playgroud)
message.service.ts
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs/Subject';
import { Message } from '../models/message';
@Injectable()
export class MessageService {
constructor() { }
showError(msg: string) {
console.log('MessageService Alert::'+msg);
}
}
Run Code Online (Sandbox Code Playgroud)
item.service.ts
import { Injectable } from '@angular/core';
import { Http, Response, Headers, RequestOptions } from '@angular/http';
import { Item } from '../models/item';
import { MessageService } from '../services/message.service'
import { Observable } from 'rxjs';
@Injectable()
export class ItemService {
private restUrl = 'http://localhost:3000/'; // URL to web api
constructor(
private http: Http,
private msgService: MessageService) { }
getAllItems(): Observable<Item[]> {
return this.http
.get(this.restUrl+'items')
.map( (res: Response) => res.json() as Item[])
.catch(this.handleError);
}
private handleError(error: any): Promise<any> {
console.error('An error occurred', error);
let errorMsg = error.message || error;
this.msgService.showError("errorMsg"); // msgService is undefined here.
return Promise.reject(errorMsg);
}
}
Run Code Online (Sandbox Code Playgroud)
这里msgService在ItemService中是未定义的.任何人都可以帮我解决这个问题吗?
问题this.不是ItemService
.catch(this.handleError);
Run Code Online (Sandbox Code Playgroud)
应该
.catch(this.handleError.bind(this));
Run Code Online (Sandbox Code Playgroud)
用于this.指向内部的当前类实例handleError()
| 归档时间: |
|
| 查看次数: |
1746 次 |
| 最近记录: |