В чем проблема в этой подписке Angular 7 rxjs от распознавателя - PullRequest
0 голосов
/ 14 июня 2019

Я написал короткий код, чтобы попробовать распознаватель маршрутов и подписки внутри компонента Вот конфигурация маршрута:

  {
    path: '',
    component: EventsComponent,
    resolve: {
      events: EventsResolverService
    }
  },
  ...

Resolver просто реализует интерфейс Resolve:

import { Injectable } from '@angular/core';
import { Resolve } from '@angular/router';
import { EventInterface } from './event-interface';
import { EventsService } from './events.service';
import { Observable } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class EventsResolverService implements Resolve<Map<number, EventInterface>> {

  constructor(private eventsService: EventsService) { }

  public resolve(): Observable<Map<number, EventInterface>> {
    console.log('Resolver in progress');
    return this.eventsService.asObservable();
  }
}

Тем не менее, сервис, который я использую, чтобы получить карту событий как наблюдаемую:

  public asObservable(): Observable<Map<number, EventInterface>> {
    if (this.events.size) {
      return of(this.events);
    } else {
      this._hydrate();
      console.log('Events are : ' + this.events.size);
      return of(this.events);
    }
  }

Наконец, в методе ngOnInit () компонента:

  public ngOnInit(): void {
    this.activatedRoute.data.subscribe(
      (events: Map<number, EventInterface>) => {
        console.log('Hi events resolved ' + events.size);
        this.eventsMap = events;
      },
      (error: any) => {
          console.log('Something went wrong : ' + error);
      }
    );
  }

Консольное сообщение всегда возвращается: не определено, но в сервисе корректно возвращается размер карты событий:

results in the browser console

Так что не так с этим фрагментом кода?

1 Ответ

0 голосов
/ 14 июня 2019

Вы неправильно обрабатываете значение, выданное ActivatedRoute.data.

this.activatedRoute.data.pipe(map(data=>data.events)).subscribe(
      (events: Map<number, EventInterface>) => {
        console.log('Hi events resolved ' + events.size);
        this.eventsMap = events;
      },
      (error: any) => {
          console.log('Something went wrong : ' + error);
      }
    );
...