Combinando parâmetros de caminho angular?

Oct 07 2020

O aplicativo Angular Material Docs combina parâmetros de caminho como este:

    // Combine params from all of the path into a single object.
    this.params = combineLatest(
        this._route.pathFromRoot.map(route => route.params), Object.assign);

Aqui está um exemplo: https://github.com/angular/material.angular.io/blob/master/src/app/pages/component-category-list/component-category-list.ts

No entanto, isso produz o erro:

@deprecated - resultSelector não é mais suportado, pipe para mapear ao invés

Então, para contornar isso, é possível fazer isso:

    this.params = combineLatest(
      this._route.pathFromRoot.map(route => route.params)
    ).pipe(
        map(Object.assign)
    );

Conforme documentado aqui: combineLatest refatoração para @deprecated - resultSelector não é mais suportado, pipe para mapear?

No entanto, isso produz este erro:

ERROR TypeError: Não é possível ler a propriedade 'name' de undefined em SafeSubscriber._next (component-category-list.ts: 50) em SafeSubscriber .__ tryOrUnsub (Subscriber.js: 183) em SafeSubscriber.next (Subscriber.js: 122) em Subscriber ._next (Subscriber.js: 72) em Subscriber.next (Subscriber.js: 49) em MapSubscriber._next (map.js: 35) em MapSubscriber.next (Subscriber.js: 49) em CombineLatestSubscriber.notifyNext (combineLatest.js : 73) em InnerSubscriber._next (InnerSubscriber.js: 11) em InnerSubscriber.next (Subscriber.js: 49) em BehaviorSubject._subscribe (BehaviorSubject.js: 14) em BehaviorSubject._trySubscribe (Observable.js: 42) em BehaviorSubject. _trySubscribe (Subject.js: 81) em BehaviorSubject.subscribe (Observable.js: 28) em subscribeToResult (subscribeToResult.js: 9)

Portanto, parece que o sectionparâmetro de URL que o componente está procurando não está mais sendo capturado após a refatoração. Pensamentos?

Respostas

Ole Oct 09 2020 at 11:23

Os parâmetros devem ser desestruturados ao passar para Object.assignassim:


    // Combine params from all of the path into a single object.
    this.params = combineLatest(
      this._route.pathFromRoot.map(route => route.params)).
      pipe(map((params:Params[])=>Object.assign({}, ...params)));