Skip to content
This repository was archived by the owner on Apr 17, 2020. It is now read-only.

Commit 0f5c519

Browse files
author
Your Name
committed
RxJs and Reactive Patterns Angular Architecture Course ongoing
1 parent aec4350 commit 0f5c519

File tree

4 files changed

+49
-15
lines changed

4 files changed

+49
-15
lines changed

src/app/app.module.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import {SafeUrlPipe} from "./shared/pipes/safe-url.pipe";
2929
import { MessagesComponent } from './messages/messages.component';
3030
import {MessagesService} from "./services/messages.service";
3131
import { CreateLessonComponent } from './create-lesson/create-lesson.component';
32+
import {CourseDetailResolver} from "./course-detail/course-detail.resolver";
3233

3334

3435
@NgModule({
@@ -65,7 +66,8 @@ import { CreateLessonComponent } from './create-lesson/create-lesson.component';
6566
NewsletterService,
6667
UserService,
6768
CoursesHttpService,
68-
MessagesService
69+
MessagesService,
70+
CourseDetailResolver
6971
],
7072
bootstrap: [AppComponent]
7173
})

src/app/course-detail/course-detail.component.ts

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ import {Component, OnInit} from '@angular/core';
22
import {ActivatedRoute} from '@angular/router';
33
import {Course} from "../shared/model/course";
44
import {Lesson} from "../shared/model/lesson";
5-
import {CoursesService} from "../services/courses.service";
6-
import {UserService} from "../services/user.service";
75
import {Observable} from "rxjs";
86

97

@@ -17,25 +15,25 @@ export class CourseDetailComponent implements OnInit {
1715
course$: Observable<Course>;
1816
lessons$: Observable<Lesson[]>;
1917

20-
constructor(private route: ActivatedRoute,
21-
private coursesService: CoursesService,
22-
private userService: UserService) {
18+
constructor(private route: ActivatedRoute) {
2319

2420
}
2521

2622
ngOnInit() {
2723

28-
this.course$ = this.route.params
29-
.switchMap(params => this.coursesService.findCourseByUrl(params['id']))
30-
.first()
31-
.publishLast().refCount();
24+
this.course$ = this.route.data.map(data => data['detail'][0]);
3225

33-
this.lessons$ = this.course$
34-
.switchMap(course => this.coursesService.findLessonsForCourse(course.id))
35-
.first()
36-
.publishLast().refCount();
26+
this.lessons$ = this.route.data.map(data => data['detail'][1]);
3727

3828
}
3929

4030

4131
}
32+
33+
34+
35+
36+
37+
38+
39+
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
2+
3+
import {Resolve, ActivatedRouteSnapshot, RouterStateSnapshot} from "@angular/router";
4+
import {Course} from "../shared/model/course";
5+
import {Lesson} from "../shared/model/lesson";
6+
import {Observable} from "rxjs";
7+
import {Injectable} from "@angular/core";
8+
import {CoursesService} from "../services/courses.service";
9+
10+
11+
@Injectable()
12+
export class CourseDetailResolver implements Resolve<[Course,(Lesson[])]> {
13+
14+
constructor(private coursesService: CoursesService) {
15+
16+
}
17+
18+
19+
resolve(
20+
route: ActivatedRouteSnapshot,
21+
state: RouterStateSnapshot): Observable<[Course, (Lesson[])]> {
22+
23+
return this.coursesService.findCourseByUrl(route.params['id'])
24+
.switchMap(course => this.coursesService.findLessonsForCourse(course.id),
25+
(course, lessons) => [course, lessons] );
26+
27+
28+
}
29+
30+
}

src/app/router.config.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {CourseDetailComponent} from "./course-detail/course-detail.component";
44
import {LoginComponent} from "./login/login.component";
55
import {AllLessonsComponent} from "./all-lessons/all-lessons.component";
66
import {CreateLessonComponent} from "./create-lesson/create-lesson.component";
7+
import {CourseDetailResolver} from "./course-detail/course-detail.resolver";
78

89
export const routerConfig: Routes = [
910
{
@@ -20,7 +21,10 @@ export const routerConfig: Routes = [
2021
},
2122
{
2223
path: 'course/:id',
23-
component: CourseDetailComponent
24+
component: CourseDetailComponent,
25+
resolve: {
26+
detail: CourseDetailResolver
27+
}
2428
},
2529
{
2630
path: 'lesson/new',

0 commit comments

Comments
 (0)