53

我已经完成将我的应用程序更新到 Angular 6(它是 5.2 版本)。

我得到一个错误语法:

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

错误 TS2339:“可观察”类型上不存在属性“过滤器”。

Angular 6 中的正确语法是什么?

谢谢

4

3 回答 3

121

这是使用 Angular 6+ 和最新的 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);
        });
    }
}

使用pipe运算符而不是尝试在可观察对象上进行链接过滤。

于 2018-05-15T14:50:44.603 回答
5

如果您导入过滤器,我在您的代码中看不到

对于 Rxjs 6:

import { filter } from 'rxjs/operators';

    .
    .
    .

     this.router.events.pipe(
       filter((event:Event) => event instanceof NavigationEnd)
     ).subscribe(res => console.log(res))
于 2018-05-15T14:53:26.193 回答
2

激活的路线没有给我网址。所以我尝试了这个。PS: event['url'] 代替 event.url

import { filter } from 'rxjs/operators';
import { Router,NavigationEnd } from '@angular/router';

 router.events.pipe(filter(event => event instanceof NavigationEnd))
        .subscribe(event => 
         {
            this.currentRoute = event['url'];          
            console.log(this.currentRoute);
         });
于 2020-10-18T16:22:06.660 回答