Angular 2 DI undefined class

时间:2016-06-23 10:16:09

标签: angular angular2-di

目前我正试图在应用程序中注入某种设置类。

import { Injectable } from '@angular/core';
import { Http } from '@angular/http';

@Injectable()
export class Settings {

    private apiUrl: string = '';
    private location: string = '';
    private language: string = 'en';

    constructor() {
        if(localStorage.getItem('apiUrl')) this.apiUrl = localStorage.getItem('apiUrl');
        if(localStorage.getItem('location')) this.location = localStorage.getItem('location');
        if(localStorage.getItem('language')) this.language = localStorage.getItem('language');
    }

    getApiUrl(): string {
        return this.apiUrl;
    }

    getLocation(): string {
        return this.location;
    }

    getLanguage(): string {
        return this.language;
    }

    setApiUrl(apiUrl: string): void {
        this.apiUrl = apiUrl;
        localStorage.setItem('apiUrl', apiUrl);
    }

    setLocation(location: string): void {
        this.location = location;
        localStorage.setItem('location', location);
    }

    setLanguage(language: string): void {
        this.language = language;
        localStorage.setItem('language', language);
    }

}

这是我的设置类...

我接下来尝试做的是通过整个应用程序注入(因为设置将被大量使用)。为此,我认为最好的方法是使用bootstrap()函数执行此操作。所以这是我的自助功能:

bootstrap(AppComponent, [Settings])

我确实将它插入到我想要使用apiUrl设置的服务的构造函数中:

@Injectable()
export class UserService {
    constructor(private _settings: Settings, private _http:Http) { }
}

但由于某些原因,在运行应用程序时,我在UserService中收到一条错误,指出构造函数的第一个参数(_settings)未定义。

我一直在尝试不同的事情,但还没找到合适的解决方案..

2 个答案:

答案 0 :(得分:1)

您是否忘记在UserService中导入Settings类?

您没有列出UserService的顶部...

答案 1 :(得分:0)

好的,所以在尝试了很多事情之后我发现了问题所在。

我有一个TS文件,其中包含我拥有的每个文件夹的所有导出..

我有这个核心文件夹,包含Settings类和一个名为core.ts的文件。

当我这样做时:import { Settings } from './core';它不起作用。 但是当我这样做时:import { Settings } from './core/settings,它确实有效。