[英]Angular 2.0 RC 1 injecting services
我正在將服務注入服務中……通過所有文檔,它應該可以工作,但事實並非如此。
我在main.ts中有這個:
import { LocalStorageService } from './services/app.localStorage.service';
bootstrap(AppComponent, [HTTP_PROVIDERS, LoginService, ConfigService, LocalStorageService ] );
因此,僅是常規內容,該LocalStorageService應該在應用程序級別可見。 當然,它上面有@Injectable()。
現在在另一個服務LoginService中,我試圖像這樣使用它:
import { Injectable } from '@angular/core';
import { Http, Response, Headers, RequestOptions } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import {LocalStorageService} from '../service/app.localStorage.service';
@Injectable()
export class LoginService
{
constructor ( private _localStorage : LocalStorageService )
{
// Here IT WORKS!
var val = this._localStorage.read( 'SomeKey' );
}
someMethod() : boolean
{
// Here IT DOES NOT WORK!
var val = this._localStorage.read( 'SomeKey' );
return true;
}
}
這真的很奇怪,就好像構造函數中的_localStorage僅是該方法的本地變量,而不是類的局部變量,而不是該類的局部變量。 錯誤為:“ this._localStorage未定義”。
謝謝。
解決了:
這是示例,它可以正常工作: Plunker
正如@yurzui在他的第一條評論中提到的那樣,可能的問題是,當您調用someMethod()
您將無法維護組件的正確this
上下文。
例如,您可能會有類似以下的代碼:
this.someService.getSomeObservable().subscribe(this.someMethod); // wrong this context
需要重寫為
this.someService.getSomeObservable().subscribe(_ => this.someMethod);
是否添加:
@Component({
providers: [LocalStorageService]
})
上課上班?
將private _localStorage : LocalStorageService
更改為public _localStorage : LocalStorageService
; 否則, _localStorage
僅在構造函數中可見
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.