嗨,我正在使用Angular 2 final与路由器3.0 . 我想过滤从 this.router.events
发出的事件
我想做的事 :
import 'rxjs/operator/filter';
//...
this.router.events
.filter((event:Event) => event instanceof NavigationEnd)
.subscribe(x => console.log(x))
event
可以是instanceOf NavigationEnd
, NavigationStart
或 RoutesRecognized
但我只想 NavigationEnd
. 但我得到一个错误
Property 'filter' does not exist on type Observable<Event>
在编译期间 .
当我导入整个 rxjs
库时,错误消失 . 我应该导入什么才能使它工作而不加载完整的rxjs库?
6 回答
UPDATE
对于
RXJS 5.x
版本:import 'rxjs/add/operator/filter';
对于
RXJS 6.x
version:import { filter } from 'rxjs/operators';
此方案有几种可能的修复方法 .
1)使用可管道运算符
与rxjs / add / operator / *中的“补丁”运算符相比,可管理运算符是一种更好的方法来提取所需的运算符
2)使用'rxjs / add / operator / filter'
将import语句更改为
import 'rxjs/add/operator/filter'
. 这将修改Observable.prototype
并将filter
方法添加到Observable类的每个实例 .有两个后果:
每个应用程序只执行一次import语句就足够了
在共享库/ npm包中这可能会给库使用者带来一些混淆(
filter()
方法在使用库时会神奇地出现在Observable
下)3)保留运算符导入但更改其调用方式
声明
import 'rxjs/operator/filter'
完全有效 . 它只会导入运营商 . 这种方法不会弄乱Observable.prototype
. 在不利方面,它将使连锁几个运营商变得更加困难 .更多细节:Pipeable Operators
角度更新(5.x到6.x)还附带了从5.x到6.x的rxjs更新所以简单地添加
然后
希望这有助于某人
在使用Angular 6升级更新到Rxjs 6之后
最简单的方法就是
这将使任何版本差异神奇地消失!
请在这里查看活动类型 - > .filter((event:Event)