当前位置: 首页 > 知识库问答 >
问题:

Angular 7 带身份验证的延迟加载

穆建元
2023-03-14

我正在尝试从我的app模块中加载模块。但是,它没有得到懒惰加载,以及网址导航不能正常工作。当我试图访问我的惰性加载模块组件时,我得到如下错误....

core.js:14597 ERROR Error: Uncaught (in promise): TypeError: undefined is not a function
TypeError: undefined is not a function
    at Array.map ()
    at webpackAsyncContext ($_lazy_route_resource lazy namespace object:21)
    at SystemJsNgModuleLoader.push../node_modules/@angular/core/fesm5/core.js.SystemJsNgModuleLoader.loadAndCompile (core.js:17170)
    at SystemJsNgModuleLoader.push../node_modules/@angular/core/fesm5/core.js.SystemJsNgModuleLoader.load (core.js:17162)
    at RouterConfigLoader.push../node_modules/@angular/router/fesm5/router.js.RouterConfigLoader.loadModuleFactory (router.js:3608)
    at RouterConfigLoader.push../node_modules/@angular/router/fesm5/router.js.RouterConfigLoader.load (router.js:3596)
    at MergeMapSubscriber.project (router.js:2605)
    at MergeMapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapSubscriber._tryNext (mergeMap.js:61)
    at MergeMapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapSubscriber._next (mergeMap.js:51)
    at MergeMapSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next (Subscriber.js:54)
    at Array.map ()
    at webpackAsyncContext ($_lazy_route_resource lazy namespace object:21)
    at SystemJsNgModuleLoader.push../node_modules/@angular/core/fesm5/core.js.SystemJsNgModuleLoader.loadAndCompile (core.js:17170)
    at SystemJsNgModuleLoader.push../node_modules/@angular/core/fesm5/core.js.SystemJsNgModuleLoader.load (core.js:17162)
    at RouterConfigLoader.push../node_modules/@angular/router/fesm5/router.js.RouterConfigLoader.loadModuleFactory (router.js:3608)
    at RouterConfigLoader.push../node_modules/@angular/router/fesm5/router.js.RouterConfigLoader.load (router.js:3596)
    at MergeMapSubscriber.project (router.js:2605)
    at MergeMapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapSubscriber._tryNext (mergeMap.js:61)
    at MergeMapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapSubscriber._next (mergeMap.js:51)
    at MergeMapSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next (Subscriber.js:54)
    at resolvePromise (zone.js:814)
    at resolvePromise (zone.js:771)
    at zone.js:873
    at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:421)
    at Object.onInvokeTask (core.js:16147)
    at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:420)
    at Zone.push../node_modules/zone.js/dist/zone.js.Zone.runTask (zone.js:188)
    at drainMicroTaskQueue (zone.js:595)
    at push../node_modules/zone.js/dist/zone.js.ZoneTask.invokeTask (zone.js:500)
    at ZoneTask.invoke (zone.js:485)

应用程序路由

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { HomeComponent } from './shared/home/home.component';
import { PageNotFoundComponent } from './Error/page-not-found/page-not- 
found.component';
import { AuthGuard } from './authentication/auth.guard';
const routes: Routes = [
   { path: '', redirectTo: '/home', pathMatch: 'full' },
   { path: 'home', component: HomeComponent },
   {
     path: 'users',
     canLoad: [AuthGuard],
     loadChildren: './user/user.module#UserModule',
     data: {role: 'user'}
   },
   { path: '**', component: PageNotFoundComponent }
 ];
 @NgModule({
 imports: [RouterModule.forRoot(routes, {enableTracing: true, useHash: 
 true})],
 exports: [RouterModule]
 })
 export class AppRoutingModule {}

用户模块路由

import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';   
import { CartComponent } from './cart/cart.component';
import { PaymentComponent } from './payment/payment.component';
const routes: Routes = [
    { path: '', component: CartComponent},
    { path: 'payment', component: PaymentComponent },
];

@NgModule({
  imports: [RouterModule.forChild(routes)],
  exports: [RouterModule]
})
export class UserRoutingModule {}

共有1个答案

钱星辰
2023-03-14

不确定为什么您的路由在Angular 7中失败。但是当我构建示例应用程序时,它工作正常。

请用下面的代码试试。

步骤1:创建<code>admin</code>区域作为懒加载,并在<code>app routing.module.ts中创建懒加载路由

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { NotFoundComponent } from './not-found/not-found.component';

const routes: Routes = [
  { path: '', redirectTo: '', pathMatch: 'full' },
  { path: 'admin', loadChildren: './admin/admin.module#AdminModule' },
  { path: '**', component: NotFoundComponent }
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }

第2步:路由路径的超文本标记语言

<nav class="navbar navbar-expand-sm bg-dark navbar-dark">
    <ul class="navbar-nav">
        <li class="nav-item">
            <a class="nav-link" routerLink="/">Home</a>
        <li class="nav-item">
            <a class="nav-link" routerLink="/admin">Admin </a> </li>
    </ul>
</nav>

第三步:admin-routing.module.ts

import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { DashboardComponent } from './dashboard/dashboard.component';

const adminRoutes: Routes = [
  { path: '', component: DashboardComponent }
]

@NgModule({
  imports: [RouterModule.forChild(adminRoutes)],
  exports: [RouterModule]
})
export class AdminRoutingModule { }

第四步:admin.module.ts

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { AdminRoutingModule } from './admin-routing.module';
import { DashboardComponent } from './dashboard/dashboard.component';

@NgModule({
  declarations: [DashboardComponent],
  imports: [CommonModule, AdminRoutingModule]
})
export class AdminModule { 
}
 类似资料:
  • 我想在Docker上设置一个配置了身份验证的Cassandra容器。目前我使用的是官方的Cassandra Docker图像,但它似乎没有提供启用认证模式的选项(通过ENV thingies)。 一种可能性是设置一个自己的存储库,从Cassandra Docker GitHub克隆并修改此文件,以便它也接受与身份验证相关的选项,但对于我非常简单的任务来说,这似乎有点复杂。有没有人知道一个更简单的解

  • 问题内容: 如果这是完全相同的内容,请纠正我,我知道这个话题经常被讨论,但是找不到确切的答案。 问题: 在MVC Web应用程序中处理Hibernate对象的最佳实用解决方案是什么? 细节: 我正在使用Hibernate,并希望在可能的情况下利用延迟加载。 我正在使用MVC风格的webapp。 我讨厌获得延迟加载初始化异常。 我讨厌不得不在事务之间重新连接Hibernate对象。 选项: 渴望装载

  • 身份验证 PDF版下载 企业应用中的URL链接可以通过OAuth2.0验证接口来获取员工的身份信息。 通过此接口获取员工身份会有一定的时间开销。对于频繁获取员工身份的场景,建议采用如下方案: 企业应用中的URL链接直接填写企业自己的页面地址; 员工跳转到企业页面时,企业校验是否有代表员工身份的cookie,此cookie由企业生成; 如果没有获取到cookie,重定向到OAuth验证链接,获取员工

  • 问题内容: 我正在努力为使用网关的REST API设计SAML2.0身份验证。在我的后端和应用程序之间使用REST。我正在使用Java Servlet过滤器和Spring。 我看到两种可能性: 每次将SAML令牌添加到标头中。 使用SAML进行一次身份验证,然后使用客户端与网关之间的会话或类似(安全对话)进行身份验证。 情况1: 这是一个很好的解决方案,因为我们仍然是RESTful,但是: SAM

  • 最后一行失败了 捕获的JMSException:com.ibm.msg.client.jms.detailedJMSSecurityException:JMSWMQ2013:为连接模式为“Client”、主机名为“Natmib1.hostname.net(1414)”的QueueManager“提供的安全身份验证无效。请检查您正在连接到链接异常:com.ibm.MQ.mqexception:jms