Angular 角度-在不同模块之间提供防护
目前,我基本上有以下角度模块:Angular 角度-在不同模块之间提供防护,angular,angular-router,angular-module,angular-router-guards,Angular,Angular Router,Angular Module,Angular Router Guards,目前,我基本上有以下角度模块: 着陆 admin core 共享 我想在共享模块中注册一个名为AuthenticationGuard的新防护,并在不同模块之间提供它 目前,它仅在着陆模块(这是我引导的模块)中注册守卫时有效,而在管理模块或共享模块中注册守卫时无效 如果我这样做,我会收到一个错误,说明如下: 通过相应模块的提供程序阵列注册防护 我的目标是能够在所有模块中使用它 在管理模块中从核心注入服务没有问题-因此我假设警卫和服务之间总的来说一定有区别 目前,一些相关文件看起来是这样的(为了简
着陆
admin
core
共享
共享
模块中注册一个名为AuthenticationGuard
的新防护,并在不同模块之间提供它
目前,它仅在着陆模块
(这是我引导的模块)中注册守卫时有效,而在管理模块
或共享模块
中注册守卫时无效
如果我这样做,我会收到一个错误,说明如下:
通过相应模块的提供程序阵列注册防护
我的目标是能够在所有模块中使用它
在管理
模块中从核心
注入服务没有问题-因此我假设警卫
和服务
之间总的来说一定有区别
目前,一些相关文件看起来是这样的(为了简洁起见缩短):
着陆模块
着陆路由模块
管理模块
admin.routing.module
共享模块
auth-guard.service
您需要在providers
数组中的模块装饰器中导入AuthenticationService
。这就是那个错误所表明的
根据您在这里所拥有的内容,我看不到在您的任何模块中添加作为提供商的AuthenticationService
。除非它位于此处未显示的app.modules.ts
中。您需要在提供者
数组中的模块装饰器中导入AuthenticationService
。这就是那个错误所表明的
根据您在这里所拥有的内容,我看不到在您的任何模块中添加作为提供商的AuthenticationService
。除非它在您的app.modules.ts
中,此处不显示。那么,共享模块中的防护装置在哪里以及如何提供?发布其定义。关于AuthenticationService,您是否将其添加到提供程序数组?在哪个模块中?很好的输入-我已经把它添加到主题中了。我已经添加了guard
和shared
模块的实现。@Hansmusterwhater如Fateh所示:您没有在任何地方提供AuthenticationService。那么,共享模块中在何处以及如何提供guard?发布其定义。关于AuthenticationService,您是否将其添加到提供程序数组?在哪个模块中?很好的输入-我已经把它添加到主题中了。我已经添加了guard
和shared
模块的实现。@Hansmusterwhateh,正如Fateh所指出的:您没有在任何地方提供AuthenticationService。出于某种原因,我认为错误提到了AuthenticationGuard
-我会看一看!出于某种原因,我认为错误提到了AuthenticationGuard
——我会看一看!
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { HomeComponent } from './home/home.component';
import { LandingRoutingModule } from './landing.routing.module';
import { SharedModule } from '../shared/shared.module';
import { CoreModule } from '../core/core.module';
import { SecurityModule } from '../security/security.module';
import { AdminModule } from '../admin/admin.module';
@NgModule({
declarations: [
HomeComponent
],
imports: [
SharedModule.forRoot(),
CoreModule.forRoot(),
SecurityModule,
LandingRoutingModule
],
providers: [],
bootstrap: [HomeComponent]
})
export class AppModule { }
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { HttpClientModule } from '@angular/common/http';
import { HomeComponent } from './home/home.component'
import { NotFoundComponent } from './../shared/components/not-found/not-found.component';
const appRoutes: Routes = [
{
path : '',
redirectTo : '/login',
pathMatch: 'full'
},
{
path : 'admin',
loadChildren: 'app/modules/admin/admin.module#AdminModule'
},
{
path: '**',
component: NotFoundComponent
}
];
@NgModule({
declarations: [],
imports: [
HttpClientModule,
RouterModule.forRoot(
appRoutes,
{ enableTracing: true }
)
],
exports: [
RouterModule
],
})
export class LandingRoutingModule { }
import { NgModule, ModuleWithProviders } from '@angular/core';
import { CommonModule } from '@angular/common';
import { SharedModule } from '../shared/shared.module';
import { AdminLandingComponent } from './admin-landing/admin-
landing.component'
import { AdminChildComponent } from './admin-child/admin-child.component'
import { AdminRoutingModule } from './admin.routing.module';
@NgModule({
declarations: [
AdminLandingComponent,
AdminChildComponent
],
imports: [
CommonModule,
AdminRoutingModule
],
})
export class AdminModule { }
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { AdminLandingComponent } from './admin-landing/admin-
landing.component';
import { AdminChildComponent } from './admin-child/admin-child.component';
import { AuthenticationGuard } from '../shared/guards/auth-guard.service'
const adminRoutes: Routes = [
{
path: '',
component: AdminLandingComponent,
canActivate: [AuthenticationGuard],
children: [
{
path: '',
children: [
{ path: 'child', component: AdminChildComponent }
]
}
]
}
];
@NgModule({
declarations: [],
imports: [
RouterModule.forChild(adminRoutes)
],
exports: [
RouterModule
],
})
export class AdminRoutingModule { }
import { NgModule, ModuleWithProviders } from '@angular/core';
import { CommonModule } from '@angular/common';
import { NotFoundComponent } from './components/not-found/not-
found.component'
import { AuthenticationGuard } from './guards/auth-guard.service';
@NgModule({
declarations: [
NotFoundComponent,
],
imports: [
CommonModule
],
})
export class SharedModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: SharedModule,
providers: [AuthenticationGuard]
};
}
}
import { Injectable } from '@angular/core';
import {
CanActivate, Router,
ActivatedRouteSnapshot,
RouterStateSnapshot,
CanActivateChild,
NavigationExtras,
CanLoad,
Route
} from '@angular/router';
import { AuthenticationService } from '../../core/services/authentication-service/authentication.service';
@Injectable()
export class AuthenticationGuard implements CanActivate, CanActivateChild, CanLoad {
constructor(private authService: AuthenticationService, private router: Router) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
return true;
}
canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
return this.canActivate(route, state);
}
canLoad(route: Route): boolean {
return true;
}
}