2017-03-04 59 views
4

我有一个服务(AuthService),我需要在我的restangularInit函数(在我的app.module.ts中)访问,但我不知道如何,我无法访问它。需要访问服务的功能

我试图将它移动到类AppModule,但到那时就要迟到了。

调用服务功能,例如, getToken按预期工作。

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 { } 

回答

1

创建一个静态方法getToken()那么你可以像你在你的代码做访问它。

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

的问题是,该服务使用的承诺,从localforage取令牌。所以这些请求在令牌设置之前发送:( – Mackelito

1

按照documentation,你可以不喜欢它::

RestangularModule.forRoot([AuthService], restangularInit) 

然后

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

问题在于服务使用承诺从localforage获取令牌,所以请求在令牌设置之前发送: – Mackelito

+0

为什么您在获取令牌之前没有获取令牌? – yurzui

+0

有很多选项可以做到像APP_INITIALIZER,canActivate,resolver – yurzui