我正在将服务注入服务......所有文档都应该有效,但事实并非如此。
我在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
答案 0 :(得分:1)
正如@yurzui在他的第一条评论中所提到的那样,可能的问题是当你致电someMethod()
时,你没有维持组件的正确this
上下文。
例如,你可能有这样的代码:
this.someService.getSomeObservable().subscribe(this.someMethod); // wrong this context
需要重写为
this.someService.getSomeObservable().subscribe(_ => this.someMethod);
答案 1 :(得分:0)
是否添加:
@Component({
providers: [LocalStorageService]
})
以上班级工作?
答案 2 :(得分:-1)
将private _localStorage : LocalStorageService
更改为public _localStorage : LocalStorageService
;否则_localStorage
只会在构造函数中显示