[Angular] Data Resolver

复制代码
// course-detail.resolver.ts 

import {Resolve, ActivatedRouteSnapshot, RouterStateSnapshot} from "@angular/router";
import {Course} from "../shared/model/course";
import {Lesson} from "../shared/model/lesson";
import {Observable} from "rxjs";
import {Injectable} from "@angular/core";
import {CoursesService} from "../services/courses.service";


@Injectable()
export class CourseDetailResolver implements Resolve<[Course,Lesson[]]> {

    constructor(private coursesService: CoursesService) {}

    resolve(
        route: ActivatedRouteSnapshot,
        state: RouterStateSnapshot): Observable<[Course, (Lesson[])]> {

        return this.coursesService.findCourseByUrl(route.params['id'])
            .switchMap(
                course => this.coursesService.findLessonsForCourse(course.id),
(course, lessons) => [course, lessons]
); } }
复制代码

The highlighted code is a combinator, which combine inner and outter observables and return a new Tuple type.

 

Router:

    {
        path: 'course/:id',
        component: CourseDetailComponent,
        resolve: {
            detail: CourseDetailResolver
        }
    },

 

Component:

复制代码
  
import {Component, OnInit} from '@angular/core';
import {ActivatedRoute} from '@angular/router';
import {Course} from "../shared/model/course";
import {Lesson} from "../shared/model/lesson";
import {Observable} from "rxjs";


@Component({
    selector: 'course-detail',
    templateUrl: './course-detail.component.html',
    styleUrls: ['./course-detail.component.css']
})
export class CourseDetailComponent implements OnInit {

    course$: Observable<Course>;
    lessons$: Observable<Lesson[]>;

    constructor(private route: ActivatedRoute) {

    }

    ngOnInit() {

        this.course$ = this.route.data.map(data => data['detail'][0]);

        this.lessons$ = this.route.data.map(data => data['detail'][1]);

    }


}
复制代码

 

posted @   Zhentiw  阅读(135)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2018-10-19 [Javascript] Use JavaScript's for-in Loop on Objects with Prototypes
2018-10-19 [Javascript] Understanding the .constructor property on JavaScript Objects
2018-10-19 [Rust] Load a WebAssembly Function Written in Rust and Invoke it from JavaScript
2018-10-19 [Rust] Setup Rust for WebAssembly
2016-10-19 [RxJS] Connection operator: multicast and connect
2016-10-19 [RxJS] AsyncSubject: representing a computation that yields a final value
点击右上角即可分享
微信分享提示