0

我想知道如何在 Angular2 中创建单例对象,它将在应用程序的整个生命周期中保存某些属性的值 - 这样我就可以在许多组件中使用它并注入它。

有任何想法吗?

谢谢

我的尝试是:

bootstrap(MyApp,[ROUTER_PROVIDERS,
HTTP_PROVIDERS,
provide(LocationStrategy, {useClass: HashLocationStrategy}),
provide(APP_BASE_HREF, {useValue: '/'}),Login])

where 

Login:

@Injectable()
export class Login {
    public  username: string = "any";
    constructor(private _http:Http, private _router:Router){

    }

    public static login(username,password){
        var creds = 'username=' + username+'&password='+password;
        this._http.post('/authentication/login',creds,{headers: contentHeaders})
            .subscribe(
                success =>{
                    this.username = success.json().username;
                    this._router.navigate(['Dashboard']);
            },
                error =>{
                    console.log('Wrong creds')
            });
    }

    public getUsername(){
        return this.username;
    }
}

在这种情况下, getUsername() 有效,但 this._http 帖子无效 - 它会引发错误:

原始异常:TypeError:无法读取未定义原始堆栈跟踪的属性“帖子”:

4

2 回答 2

3

单例模式可以通过sharedService. 你必须将它注入到bootstrap函数中

bootstrap(AppComponent,[sharedService]); // 

我已阅读您更新的问题。Plunker可以根据需要共享对象。

于 2016-03-10T12:45:50.470 回答
1

将服务添加到提供者列表中

bootstrap(AppComponent, [OtherProviders, MySingletonService]);

(不要MySingletonService在其他任何地方添加providers.

Angular2 DI 确保在任何地方都注入相同的实例。

于 2016-03-10T12:36:39.973 回答