Как загрузить данные в сервис на начальной загрузке в Angular2 RC4

Вот сценарий. У меня есть две услуги введены. Я хочу убедиться, что некоторые данные, например, базовый URL, передаются первому сервису, чтобы все последующие сервисы имели к нему доступ.

Вот мой корневой компонент

export class AppCmp {

  constructor (private httpService:HttpService, private SomeService:someService){}

}

вот первый сервис, давайте предположим, что это пользовательский httpSerive

 @Injectable()
    export class HttpService{
      BASE_URL:string;
      constructor(private http:Http){
      }
      getAll(){ return this.http.get(this.BASE_URL) }
    }

здесь второй сервис, который будет зависеть от первого, который будет выполнять запрос http.get.

@Injectable()
export class SomeService{
  constructor(private httpSerivce:HttpSerivce){
    this.httpService.getAll()...
  }
}

Я не хочу жестко кодировать базовый URL (или данные) в сервис, и я не хочу задействовать localStorages, поэтому у меня есть два варианта: либо в main.ts (файл начальной загрузки), либо в корневом компоненте, при условии, что они разделены,

Важность заключается в том, что данные доступны в первую очередь и могут быть переданы или получены первым внедренным сервисом.

Надеюсь, я смог проиллюстрировать тему и спасибо!

2 ответа

Решение

Вы можете предоставить все виды стоимости.

Зарегистрируйте провайдера, используя строковый ключ (или OpaqueToken)

{provide: 'BASE_URL', useValue: someUrl}

и впрыскивать это как

constructor(@Inject('BASE_URL') private baseURL:string)

Для RC4 сделать это в main.ts

let injector = ReflectiveInjector.resolveAndCreate(HTTP_PROVIDERS);
let http = injector.get(Http);
let authService = new AuthService(new LocalStorage(),http);
authService.BASE_URL='you url goes here'


bootstrap(AppComponent, [ 
  APP_ROUTER_PROVIDERS,
  [provide(AuthService, {useValue: authService})],
]).catch(err => console.error(err));

сделать это app.module.ts но этот код для RC5

ваш сервис:

let authService = new AuthService(new LocalStorage(), http);
authService.BASE_URL='you url goes here'

а затем добавить его в массив провайдеров

@NgModule({
  imports: [
    BrowserModule,
    FormsModule,
  ],
  declarations: [
    AppComponent,
  ],
  bootstrap: [
    AppComponent
  ],
  providers: [
    {provide: AuthService, useValue: authService},
  ]
})
Другие вопросы по тегам