Combiner les paramètres de chemin angulaire?

Oct 07 2020

L'application Angular Material Docs combine des paramètres de chemin comme celui-ci:

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

Voici un exemple: https://github.com/angular/material.angular.io/blob/master/src/app/pages/component-category-list/component-category-list.ts

Cependant, cela produit l'erreur:

@deprecated - resultSelector n'est plus pris en charge, canal à mapper à la place

Donc, pour contourner cela, il est possible de faire ceci:

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

Comme documenté ici: combineLatest refactoring pour @deprecated - resultSelector n'est plus pris en charge, canal à mapper à la place?

Cependant, cela produit cette erreur:

ERREUR TypeError: Impossible de lire la propriété 'name' de undefined sur SafeSubscriber._next (component-category-list.ts: 50) sur SafeSubscriber .__ tryOrUnsub (Subscriber.js: 183) sur SafeSubscriber.next (Subscriber.js: 122) sur Subscriber ._next (Subscriber.js: 72) sur Subscriber.next (Subscriber.js: 49) sur MapSubscriber._next (map.js: 35) sur MapSubscriber.next (Subscriber.js: 49) sur CombineLatestSubscriber.notifyNext (combineLatest.js : 73) sur InnerSubscriber._next (InnerSubscriber.js: 11) sur InnerSubscriber.next (Subscriber.js: 49) sur BehaviorSubject._subscribe (BehaviorSubject.js: 14) sur BehaviorSubject._trySubscribe (Observable.js: 42) sur BehaviorSubject._trySubscribe (Observable.js: 42) sur BehaviorSubject._trySubscribe (Observable.js: 42). _trySubscribe (Subject.js: 81) sur BehaviorSubject.subscribe (Observable.js: 28) sur subscribeToResult (subscribeToResult.js: 9)

Il semble donc que le sectionparamètre d'URL recherché par le composant ne soit plus capturé après le refactoring. Pensées?

Réponses

Ole Oct 09 2020 at 11:23

Les paramètres doivent être déstructurés lors du passage à Object.assigncomme ceci:


    // 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)));