Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度-在不同模块之间提供防护_Angular_Angular Router_Angular Module_Angular Router Guards - Fatal编程技术网

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