Я только начал пытаться изучать Angular. Я был знаком с Angular JS и решил окунуться в 2+. Видимо, я начал с Angular 6. Это был настоящий прыжок.
Я пытаюсь получить некоторую информацию из моего API при запуске приложения. Для этого я создал провайдера и жестко запрограммировал некоторую информацию, необходимую для его работы. Сейчас я пытаюсь удалить жестко закодированную часть и фактически получить сегмент URL из текущего местоположения. Я пытался использовать маршрутизатор, и я пытался использовать местоположение. Я продолжаю получать сообщение, что у них нет поставщика. Я не уверен, как обойти это. Мое предпочтительное решение - не использовать window.location, а что-то, что я могу смоделировать и / или модульный тест.
app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule, APP_INITIALIZER } from '@angular/core';
import { HttpClientModule } from '@angular/common/http';
import { RouterModule, Router } from '@angular/router';
import { AppComponent } from './app.component';
import { CoreModule } from './core/core.module';
import { TemplateListComponent } from './template-list/template-list.component';
import { SectionEditorComponent } from './section-editor/section-editor.component';
import { SiteGuidProvider } from './core/siteGuid.provider';
import { LocationStrategy, PathLocationStrategy } from '@angular/common';
@NgModule({
declarations: [
AppComponent,
TemplateListComponent,
SectionEditorComponent
],
imports: [
BrowserModule,
CoreModule,
HttpClientModule,
RouterModule
],
providers: [
SiteGuidProvider, {
provide: APP_INITIALIZER,
useFactory: siteGuidProviderFactory,
deps: [SiteGuidProvider],
multi: true
}
],
bootstrap: [AppComponent]
})
export class AppModule { }
export function siteGuidProviderFactory(provider: SiteGuidProvider){
return () => provider.load();
}
siteGuid.provider.ts
import { Injectable } from "@angular/core";
import { Location, LocationStrategy, PathLocationStrategy } from '@angular/common';
import { HttpClient } from "@angular/common/http";
import { DefaultUrlSerializer, Router, UrlTree } from "@angular/router";
import { environment } from "../../environments/environment";
import { OperationReturn } from "./models/OperationReturn";
import { Site } from "./models/Site";
@Injectable()
export class SiteGuidProvider {
private siteGuid: string = null;
constructor(private http: HttpClient,
private location: Location) {}
public getSiteGuid(): string{
return this.siteGuid;
}
load(){
console.log(this.location);
return new Promise((resolve, reject) => {
this.http
.get<OperationReturn>(environment.apiUrl + '/site/name/' + 'ja2')
.subscribe(response => {
this.siteGuid = (<Site>(response.successReturn)).siteGuidString;
resolve(true);
})
});
}
// private getDirectoryName() : string {
// let url : UrlTree = new DefaultUrlSerializer(this.router.url);
// }
}