0

所以,我试图在组件开始加载之前将这些数据放入组件中,这样我就可以在视图加载之前设置一些东西。但我对这个解析器的工作原理、它返回的内容以及如何阅读它感到困惑。

我没有得到正确的数据类型,我不确定如何正确调用这个 fetch,所以我可以最终得到一个数组,然后用来推入我的组件。

所以解析器:

import {ActivatedRouteSnapshot, Resolve, RouterStateSnapshot} from "@angular/router";
import {Observable} from "rxjs";
import {Injectable} from "@angular/core";
import {EntryService} from "../app/entry.service";
import { Entrymodel } from "./entry.model";

@Injectable()
export class SinglePostResolver implements Resolve<any>{
 entries :Entrymodel[] = [];
  constructor(
    private entry:EntryService,
  ){

  }

  resolve(): Observable<any>//:Observable<EntryModel>{    
      return this.entry.getAventry()
  }

}

入口模型看起来像这样

export class Entrymodel {
    id: string;
    surname: string;
    color: string;
    startDate: Startdate;
    endDate: Enddate;
    info: string;
    status?: string;
    inbet?: Inbetween[];
    editing?: boolean;
}

export class Startdate{
    day: string;
    month: string;
    year: string;
}

export class Enddate{
    day: string;
    month: string;
    year: string;
}

export class Inbetween{
    day: string;
    month: string;
    year: string;
}

获取:

  getAventry(){
    return this.firestore.collection('entry', x => x.where('status' , '==', 'Attending')).snapshotChanges();
  }

我试图到达的地方:

ngOnInit(): void{
  this.route.data.subscribe( (data) => { 
   
  });
   console.log(this.entries)

  }

路线:

  { path: 'calendar', component: CalendarComponent, resolve: { singlePost: SinglePostResolver}}

所以,这里让我感到困惑的是如何在解析器中正确调用 fetch。

我应该订阅/管道吗?我不确定如何处理它,然后如何调整解析器在路线中返回给我的内容?EG 将该数据放入数组中以供使用。

我尝试了一些完全愚蠢的事情。我已经阅读了 Observable 和 rxjs 上的 angular 文档,我主要理解 observables 的含义,并且需要一个 sub 来启动流,但是当我有接口时,我只是对如何处理它们的更复杂版本感到困惑/我想和他们一起使用的课程..

4

1 回答 1

1

您的数据将是类型Observable<{ singlePost: any }>,因为您在路由中如此声明。ActivatedRoute如果注射得当,你应该不会有问题。

import { ActivatedRoute} from '@angular/router';

// ...

constructor(readonly route: ActivatedRoute) {}

ngOnInit(): void {
  (this.route.data as Observable<{ singlePost: any }>).subscribe((data) => { 
   console.log(data.singlePost);
  });
}

也许您应该仔细检查您要返回的究竟是什么,因为它并没有为我敲响警钟。(输入一个类型,而不是any这样它可以帮助您理解或任何其他试图阅读此内容的人)

于 2021-02-08T17:04:32.637 回答