Angular2 ładuje konfigurację z backendu przy starcie
W mojej aplikacji Angular2 próbuję załadować konfiguracje z zaplecza do ładowania początkowego przy użyciu protokołu HTTP, aby użyć pobranych danych do tworzenia usług kątowych.
Za każdym razem, gdy próbuję odczytać odpowiedź HTTP zapisaną w mojej konfiguracji, zawsze otrzymuję
TypeError: nie można odczytać właściwości „url” undefined
błędy.
Wygląda na to, że żądanie HTTP kończy się dopiero po zakończeniu całej metody ładowania początkowego, podczas gdy mój kod próbuje pobrać obserwowalną odpowiedź przed jej pobraniem.
Jak mogę to naprawić, aby pobrać konfigurację z serwera i użyć jej do tworzenia usług kątowych podczas uruchamiania? (Chcę tworzyć usługi wewnątrz dostawców z wyodrębnionymi danymi)
Prosimy o komentarz, jeśli istnieje lepszy sposób na pobranie konfiguracji z serwera przy starcie.
Mój
main.ts
na to wygląda:
<pre class="lang-js prettyprint-override">
bootstrap(AppComponent,
[APP_ROUTER_PROVIDERS, HTTP_PROVIDERS, ConfigurationService, Config])
.catch(err => console.error(err));
configuration.service.ts
<pre class="lang-js prettyprint-override">
@Injectable()
export class ConfigurationService { constructor(private http: Http) {
} load() {
return this.http.get('config/getConfig').map(response => response.json());
}}
config.ts
<pre class="lang-js prettyprint-override">
@Injectable()
export class Config { public config; constructor(public configurationService: ConfigurationService) {
configurationService.load().subscribe( config => this.config = config,
error => console.error('Error: ' + error)
);
} get(key: any) {
return this.config[key];
}
}
app.component.ts
<pre class="lang-js prettyprint-override">
@Component({
selector: 'app',
templateUrl: 'app/app.component.html',
styleUrls: ['app/app.component.css'],
directives: [ROUTER_DIRECTIVES],
providers: [MyService]
})
export class AppComponent { constructor(public myService: MyService) {
}}
my.service.ts
<pre class="lang-js prettyprint-override">
@Injectable()
export class MyService{ private url; constructor(public config: Config) {
this.url = config.get('url');
}
}
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
3 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
<pre class="lang-js prettyprint-override">
Aby to zrobić, musisz nieco dostosować klasę :
<pre class="lang-js prettyprint-override">
Wtedy będziesz mógł uzyskać bezpośredni dostęp do właściwości obiektu config w swojej aplikacji.
Anonimowy użytkownik
Potwierdzenie od:
<pre class="lang-js prettyprint-override">
a konfiguracja aplikacji wygląda następująco:
<pre class="lang-js prettyprint-override">
połączyć
https://github.com/angular/angular/issues/10789
https://github.com/angular/angular/issues/10789
Anonimowy użytkownik
Potwierdzenie od:
<pre class="lang-js prettyprint-override">