web-dev-qa-db-fra.com

Angular 6 routeur.events.filter 'filtre' n'existe pas sur le type 'Observable <Event>'

J'ai fini de mettre à jour mon application sur Angular 6 (version 5.2).

J'ai une syntaxe d'erreur dans:

import { Router, ActivatedRoute, NavigationEnd } from '@angular/router';
import { filter } from 'rxjs/operators';
...
constructor(private router: Router) {}

this.router.events.filter
      (event => event instanceof NavigationEnd).subscribe((res) => 
    {
      // DO something
    });

erreur TS2339: La propriété 'filtre' n'existe pas sur le type 'Observable'.

quelle est la bonne syntaxe dans Angular 6?

merci

31
Anouar Mokhtari

Voici comment filtrer les événements de routeur avec Angular 6+ et le dernier RxJS:

import { Component, OnInit } from '@angular/core';
import { Router, ActivatedRoute, NavigationEnd } from '@angular/router';

import { filter } from 'rxjs/operators';

export class MyComponent implements OnInit {
    constructor(private router: Router, private activatedRoute: ActivatedRoute) {}

    ngOnInit() {
        this.router.events.pipe(
            filter(event => event instanceof NavigationEnd)
        ).subscribe(() => {
            console.log(this.activatedRoute.root);
        });
    }
}

Utilise l'opérateur pipe au lieu d'essayer de chaîner le filtre sur l'observable.

83
Lansana Camara

Je ne vois pas dans votre code si vous avez importé un filtre

pour Rxjs 6:

import { filter } from 'rxjs/operators';

    .
    .
    .

     this.router.events.pipe(
       filter((event:Event) => event instanceof NavigationEnd)
     ).subscribe(res => console.log(res))
2
Patricio Vargas