- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个完整的 angular 应用程序,它使用预先加载。
我想将其转换为延迟加载,但是因为我对所有路线都有保护,而且所有路线都是到一条 protected 主路线的子路线,我不知道是否可以做到这一点,并且仍然可以使其正常运行喜欢急切加载。
这是我在 app-routing.module 中的路由数组:
// Routing array - set routes to each html page
const appRoutes: Routes = [
{ path: 'login/:id', canActivate: [AuthGuard], children: [] },
{ path: '', canActivateChild: [AuthGuard], children: [
{ path: '', redirectTo: '/courses', pathMatch: 'full' },
{ path: 'courses', component: CourseListComponent, pathMatch: 'full'},
{ path: 'courses/:courseId', component: CourseDetailComponent, pathMatch: 'full' },
{ path: 'courses/:courseId/unit/:unitId', component: CoursePlayComponent,
children: [
{ path: '', component: CourseListComponent },
{ path: 'lesson/:lessonId', component: CourseLessonComponent, data:{ type: 'lesson'} },
{ path: 'quiz/:quizId', component: CourseQuizComponent, data: {type: 'quiz'} }
]}
]},
{ path: 'welcome', component: LandingPageComponent, pathMatch: 'full' },
{ path: '**', component: PageNotFoundComponent, pathMatch: 'full' }];
最佳答案
谢谢大家的回答。我成功地将我的路由转换为延迟加载。这是代码:
app-routing.module
import { NgModule } from '@angular/core';
import { Routes, RouterModule, Router } from '@angular/router';
import { AuthGuard } from './auth.guard';
import { AppComponent } from './app.component';
import { PageNotFoundComponent } from './page-not-found/page-not-found.component';
import { LandingPageComponent } from './landing-page/landing-page.component';
import { HeaderComponent } from './header/header.component';
import { CourseModule } from './courses/course.module';
const routes:Routes = [
{ path: 'welcome', component: LandingPageComponent, pathMatch: 'full' },
{ path: 'login/:id', canActivate: [AuthGuard], children: [] },
{ path: '', canActivateChild: [AuthGuard], children: [
{ path: '', redirectTo: 'courses', pathMatch: 'full' },
{ path: 'courses', loadChildren: () => CourseModule }
]},
{ path: '**', component: PageNotFoundComponent, pathMatch: 'full' }
]
@NgModule({
imports: [RouterModule.forRoot(routes, { onSameUrlNavigation: 'reload', initialNavigation: 'enabled',
paramsInheritanceStrategy: 'always' })],
providers: [AuthGuard],
exports: [RouterModule]
})
export class AppRoutingModule { }
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from "@angular/router";
import { AuthGuard } from '../auth.guard';
import { CourseListComponent } from './course-list/course-list.component';
import { CourseDetailComponent } from './course-detail/course-detail.component';
import { CoursePlayComponent } from './course-play/course-play.component';
import { CourseQuizComponent } from './course-play/course-quiz/course-quiz.component';
import { CourseLessonComponent } from './course-play/course-lesson/course-lesson.component';
const routes:Routes = [
{ path: '', component: CourseListComponent, canActivate: [AuthGuard] },
{ path: ':courseId', component: CourseDetailComponent, canActivate: [AuthGuard] },
{ path: ':courseId/unit/:unitId', component: CoursePlayComponent, canActivate: [AuthGuard], canActivateChild: [AuthGuard], children: [
{ path: 'lesson/:lessonId', component: CourseLessonComponent, data:{ type: 'lesson'} },
{ path: 'quiz/:quizId', component: CourseQuizComponent, data: {type: 'quiz'}}
]}
]
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class CourseRoutingModule { }
import { Injectable } from '@angular/core';
import { Observable, throwError } from 'rxjs';
import { Router, CanActivate, CanActivateChild, CanLoad, ActivatedRouteSnapshot, RouterStateSnapshot, NavigationExtras, Route } from '@angular/router';
import { AuthUserService } from './users/auth-user.service';
import { LocalStorage } from '@ngx-pwa/local-storage';
@Injectable()
export class AuthGuard implements CanActivate , CanActivateChild {
constructor(private authUserService: AuthUserService, private router: Router) { }
canActivate(route: ActivatedRouteSnapshot, state:
RouterStateSnapshot): boolean |
Observable<boolean> | Promise<boolean> {
let id, course_id;
// save the id from route snapshot
if (route.params) {
id = +route.params.id;
course_id = +route.params.courseId;
}
// if you try to logging with id
if (id) {
this.router.navigate(["/courses"]);
return this.authUserService.login(id);
}
// if you're already logged in and navigate between pages
if (this.authUserService.isLoggedIn()){
if (course_id){
// check if someone try to access a locked course
if (this.authUserService.isCourseNotPartOfTheSubscription(course_id)){
this.router.navigate(["/welcome"]);
return false;
}
else
return true;
}
else
return true;
}
// if you are not logged and didn't try to log - redirect to landing page
else {
this.router.navigate(["/welcome"]);
return false;
}
}
canActivateChild(route: ActivatedRouteSnapshot,state: RouterStateSnapshot): boolean |
Observable<boolean> | Promise<boolean> {
return this.canActivate(route, state);
}
canLoad(route: ActivatedRouteSnapshot,state: RouterStateSnapshot): boolean |
Observable<boolean> | Promise<boolean> {
return this.canActivate(route, state);
}
}
关于 Angular 6 : Convert eager loading to lazy loading,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55396282/
显然,可以实现 Haskell,使其在不改变语言语义的情况下急切地求值。如果这是真的,如何处理无限数据结构? http://csg.csail.mit.edu/pubs/haskell.html Th
有没有什么方法可以像@ManagedBean(eager=true ) 来自 javax.faces 包? @Named @ApplicationScoped public Mail() { ...
使用@ApplicationScoped @Named @Eager,我的@EJB注入(inject)的@Stateless bean未正确实例化并评估为空。 我有一个@ApplicationScop
我必须删除两个分隔符之间的字符串,即 从“123XabcX321”我想要“123321”。 对于一个简单的案例,我很好: $_=<>; s/X(.*)X//; print; 但是,如果像“123Xab
我有一个对象层次结构,订单,联系人,地址: public class Order { public virtual Contact BillingContact { get; set; }
Eager 模式仅支持 TF native 优化器我在以下尝试过的每个优化器中都会遇到此错误: def create_model(): model = tf.keras.models.Sequ
我有这样的数据设计:交易属于授权,而授权又属于客户。或者用结构体表示: type Transaction struct { shared.Transaction // transaction
我想在 Scheme 中做一个懒惰的列表。这是我到目前为止。 ;; Constructor for Pairs (define (cons-stream a b) (cons a (λ() b))
今天是个好日子 我是 Laravel 的新手,目前正在用它构建我的第一个简单的新闻应用程序 我有一个简单的查询,使用 laravel 的预先加载功能 但是在这个急切的加载功能中,我想根据某些条件获取某
我正在制作一个动态表单,让用户使用 vue.js 自动生成带有游戏统计信息的图像,并使用 Keen-ui。我是 vue.js 的新手,过去两周开始学习它。 现在,我在使用 eager-ui 进行选择下
我 fork 了 eager/dashboards github 存储库,并尝试创建一个 Dockerfile 以在 Docker 容器中运行仪表板。 我的 fork :https://github.
我的实体: @Entity @NoArgsConstructor public class Company { @Id @Getter @GeneratedValue(strategy =
在我的实体中,我必须使用 fetch = FetchType.EAGER 因为我有一个错误: nested exception is org.hibernate.LazyInitializationE
我在 Java 中使用 play 2.0.4。我正在尝试从 play 提供的内存数据库中保存和检索值(Ebean 是底层 JPA 实现)。下面是一些示例代码: @NoobDisclaimer ("I'
在 Pro .NET Performance - Optimize Your C# Applications 的第 96 页上,它谈到了 GC 急切根收集: For each local variab
我无法从数据库加载对象及其相对映射对象。可能我的“ map 系统”是错误的。 在数据库中保存对象(及其相对映射对象)时,一切正常,因此对象似乎已正确映射。 Utente是我的“主”对象 publ
我需要使用急切查询在 Laravel 中执行子查询,但结果始终为空。 查询: $project = Log::where('project_id', $id)->with(['log_occurenc
我有这个程序: var planetStream = require('../../'); var app = require('http').createServer(handler); var i
我需要与FetchType.EAGER(下面的示例)建立关系,但我有异常(exception)。如果我将 FetchType.EAGER 更改为 FetchType.LAZY 一切正常,但我确实需要
我正在使用 EF6 并尝试急切获取对象的整个结构。问题是我正在使用继承。 假设我有这个类(class)。 数据库上下文 DbSet A { get; set; } 示例类 public class A
我是一名优秀的程序员,十分优秀!