[英]App routing providers not found angular 2 - inject a service before canactivate()
我試圖在我的angular 2應用程序中注入服務,但是當我在angular / router中調用canactivate()時,服務未定義。 在canactivate()調用之前,我如何注入服務。 在此處輸入圖片說明
app.routing.ts
const appRoutes: Routes = [
{
path: '',
component: HomeComponent,
canActivate: ['AuthGuardService']
},
{
path: 'login',
component: LoginComponent,
outlet: 'popup'
},
// otherwise redirect to home
{path: '**', redirectTo: ''}
];
export const appRoutingProviders: any[] = [
{provide: "AuthGuardService", useValue: AuthGuardService}
];
export const routing: ModuleWithProviders = RouterModule.forRoot(appRoutes);
auth.guard.service.ts
import {Injectable, Inject} from '@angular/core';
import {AuthService} from "./auth.service";
import {Router, CanActivate} from "@angular/router";
import {Observable} from "rxjs";
@Injectable()
export class AuthGuardService implements CanActivate {
constructor(@Inject(AuthService) private auth, @Inject(Router) private router) {
}
canActivate() : Observable<boolean> | boolean{
if(this.auth.loggedIn()) {
return true;
}
this.router.navigate([{outlets: {popup: 'login'}}]);
return false;
}
}
app.module.ts
@NgModule({
declarations: [],
imports: [ routing ]
providers: [
appRoutingProviders,
...AUTH_PROVIDERS,
AuthService,
AuthGuardService,
HttpService,
{
provide: AuthHttp,
useFactory: AuthHttpServiceFactory,
deps: [Http, RequestOptions]
},
IndicesEffectsService,
DialogServiceService
],
bootstrap: [AppComponent]
})
export class AppModule {
}
您需要將路由作為module
公開,請嘗試以下操作:
const appRoutes: Routes =
[
{
path: '',
component: HomeComponent,
canActivate: [AuthGuardService] // <- no quotes
},
{
path: 'login',
component: LoginComponent,
outlet: 'popup'
},
// otherwise redirect to home
{path: '**', redirectTo: ''}
];
@NgModule
({
imports: [ RouterModule.forRoot(appRoutes)],
exports: [ RouterModule],
providers: [ AuthGuardService ] // <- provide guard
})
export class AppRoutingModule {}
然后在您的AppModule
@NgModule({
declarations: [],
imports: [ AppRoutingModule ] // <- import module here
providers: [
appRoutingProviders,
...AUTH_PROVIDERS,
AuthService,
// AuthGuardService, // <- no need for this
HttpService,
{
provide: AuthHttp,
useFactory: AuthHttpServiceFactory,
deps: [Http, RequestOptions]
},
IndicesEffectsService,
DialogServiceService
],
bootstrap: [AppComponent]
})
export class AppModule {
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.