Угловой, как использовать комбинироватьПоследний, чтобы объединить маршруты и запросы с веб-сайта URL - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь получить маршрут и запросы из панели URL.Приведенный ниже код взят из учебника CodeWithMosh.Я получаю сообщение об ошибке компиляции в методеgineLatest.

Ошибка выглядит следующим образом:

(свойство) paramMap: Observable Аргумент типа '{paramMap: Observable;queryParamMap: Observable;} 'нельзя назначить параметру типа' ObservableInput '.
Литерал объекта может указывать только известные свойства, а параметр "paramMap" не существует в типе "ObservableInput"

Я новичок вугловой, и я не уверен, что означает ошибка, и я попытался следовать этот ответ переполнения стека, но я все еще получил ошибку.Спасибо.

Полный код приведен ниже:

    import { ActivatedRoute } from '@angular/router';
    import { GithubFollowersService } from './../services/github-followers.service';
    import { Component, OnInit } from '@angular/core';
    import 'rxjs/add/Observable/combineLatest';
    import { Observable } from 'rxjs/internal/Observable';
    import { combineLatest } from 'rxjs';

    @Component({
      selector: 'github-followers',
      templateUrl: './github-followers.component.html',
      styleUrls: ['./github-followers.component.css']
    })
    export class GithubFollowersComponent implements OnInit {
      followers : any[];

      constructor(
        private route: ActivatedRoute,
        private service : GithubFollowersService) { }

      ngOnInit() {
        const paramMap = this.route.paramMap;
        const queryParamMap = this.route.queryParamMap;

        combineLatest({
          paramMap, // error here
          queryParamMap
        })
        .subscribe(combined => {
          let id = combined[0].get('id');//the 0 means the 1st 1 which is paramMap from above
          let page = combined[1].get('page');

          this.service.getAll().subscribe(followers => this.followers = followers);
        });


      }

    }

Ответы [ 3 ]

1 голос
/ 27 сентября 2019

Если вы используете текущую версию Angular / RxJS, ваш импорт должен выглядеть следующим образом:

import { combineLatest, Observable } from 'rxjs';

Вы видите неправильный синтаксис для combLatest.Он должен выглядеть следующим образом:

  combineLatest([
    paramMap,
    queryParamMap
  ])

Обратите внимание на [] вместо {}

Кроме того, существует соглашение о суффиксе переменных, содержащих Observable с $.

Из комментариев на github:

Статическая версия combineLatest принимает либо массив Observables, либо каждый Observable может быть непосредственно задан в качестве аргумента.

Ссылка здесь: https://github.com/ReactiveX/rxjs/blob/95bd8073e33c39a8f8d4ade8bf15c39a1154a879/src/internal/observable/combineLatest.ts

1 голос
/ 27 сентября 2019

Просто отбросьте { }:

        combineLatest(
          paramMap,
          queryParamMap
        )
        .subscribe(combined => {

Нет { }, нет [ ], просто перечислите потоки для объединения.

https://www.learnrxjs.io/operators/combination/combinelatest.html

1 голос
/ 27 сентября 2019

Вы ищете forkJoin для выполнения определенного кода после завершения множественной подписки.Для этого используется псевд логика

forkJoin(
  paramMap.pipe(
    tap(res => {
      allParams["param1"] = res.get("param1");
    })
  ),
  queryParamMap.pipe(
    tap(res => {
      allParams["param1"] = res.get("param2");
    })
  )
).subscribe(res => {
  //call your service
});
...