2017-03-04 2 views
4

Ich habe einen Dienst (AuthService), auf den ich in meiner restangularInit Funktion zugreifen muss (in meinem app.module.ts), aber ich weiß nicht, wie, ich kann nicht darauf zugreifen .Benötigt Zugriff auf Service in Funktion

Ich habe versucht, es in die Klasse AppModule zu verschieben, aber bis dahin ist es zu spät.

Aufruf der Servicefunktionen z. getToken funktioniert wie erwartet.

import { BrowserModule } from '@angular/platform-browser'; 
import { NgModule } from '@angular/core'; 
import { FormsModule } from '@angular/forms'; 
import { HttpModule } from '@angular/http'; 
import { MaterialModule } from '@angular/material'; 
import { FlexLayoutModule } from "@angular/flex-layout"; 
import { RestangularModule } from 'ng2-restangular'; 

// Components 
import { AppComponent } from './app.component'; 
import { ProductComponent } from './components/product/product.component'; 

// Services 
import { AuthService } from './services/auth.service'; 

export function restangularInit(RestangularProvider, AuthService) { 
    console.log(AuthService); // this is undefined 
    let token = AuthService.getToken(); //This is what I want to do 
    RestangularProvider.setBaseUrl('api'); 
    RestangularProvider.setDefaultHeaders(
    {'Authorization': 'Bearer ' + token}, 
); 
} 

@NgModule({ 
    declarations: [ 
    AppComponent, 
    ProductComponent 
    ], 
    imports: [ 
    BrowserModule, 
    FormsModule, 
    HttpModule, 
    MaterialModule, 
    FlexLayoutModule, 
    RestangularModule.forRoot(restangularInit) 
    ], 
    providers: [ 
    AuthService 
    ], 
    entryComponents: [ProductComponent], 
    bootstrap: [AppComponent] 
}) 
export class AppModule { } 

Antwort

1

Erstellen Sie eine statische Methode getToken() dann können Sie darauf zugreifen, wie Sie in Ihrem Code haben.

let token = AuthService.getToken(); //This is what I want to do 
+0

das Problem ist, dass der Dienst ein Versprechen verwendet die Token von localforage zu holen. so dass die Anfragen gesendet werden, bevor das Token gesetzt ist :( – Mackelito

1

Nach dem documentation können Sie es tun ::

RestangularModule.forRoot([AuthService], restangularInit) 

und dann

export function restangularInit(RestangularProvider, authService: AuthService) { 
    console.log(authService); // this is AuthService instance 
    let token = authService.getToken(); //This is what I want to do 
    RestangularProvider.setBaseUrl('api'); 
    RestangularProvider.setDefaultHeaders(
    {'Authorization': 'Bearer ' + token}, 
); 
} 
+0

das Problem ist, dass der Dienst eine Zusage verwendet, um das Token von localForage zu holen. So werden die Anfragen gesendet, bevor das Token gesetzt ist :( – Mackelito

+0

Warum Sie Token nicht vorher bekommen ? – yurzui

+0

Es gibt viele Optionen zu tun, wie APP_INITIALIZER, canActivate, Resolver – yurzui