Angular 2.0 RC 1注射服务

时间:2016-06-03 20:22:41

标签: angular angular2-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

3 个答案:

答案 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只会在构造函数中显示