当前位置: 首页 > 知识库问答 >
问题:

类型“Observable”上不存在属性“filter”

郭华美
2023-03-14

嗨,我正在使用Angular 2 final和router 3.0。我想过滤从中发出的事件。路由器。事件

我想做的是:

import 'rxjs/operator/filter';

//...

this.router.events
  .filter((event:Event) => event instanceof NavigationEnd)
  .subscribe(x => console.log(x))

事件可以是instanceOfNavigationendNavigationStartRoutes认可,但我只想要Navigationend。但是我得到一个错误

类型Observable上不存在属性“filter”

在编译时。

当我导入整个rxjs库时,错误就消失了。我应该导入什么使它工作而不加载完整的rxjs库?


共有3个答案

子车劲
2023-03-14

角度更新(5.x到6.x)也随rxjs从5.x更新而来。x到6。所以简单地加上

import { filter } from 'rxjs/operators';

然后

this.router.events.pipe(
  filter((event:Event) => event instanceof NavigationEnd)
).subscribe(x => console.log(x))

希望这能帮助别人

鲁钱明
2023-03-14
匿名用户

对于这种情况,有几种可能的修复方法。

与rxjs/add/operator中的“补丁”操作符相比,Pipeable操作符是一种更好的方法,可以只引入所需的操作符/*

import { filter } from 'rxjs/operators';

// ..

 this.router.events.pipe(
   filter((event:Event) => event instanceof NavigationEnd)
 ).subscribe(x => console.log(x))

将导入语句更改为导入'rxjs/add/操作员/过滤器'。这将修改Observable.prototype并将filter方法添加到可观察类的每个实例中。

有两个后果:

  • 每个应用程序执行一次导入语句就足够了
  • 在共享库/npm包中,这可能会给库消费者带来一些混乱(使用库时,filter()方法会神奇地出现在可观察的下)

语句import'rxjs/operator/filter'完全有效。它将只导入操作员。这种方法不会干扰可观察的。原型。不利的一面是,这将使连锁几家运营商更加困难。

import 'rxjs/operator/filter'; // This is valid import statement.
                               // It will import the operator without 
                               // modifying Observable prototype
// ..

// Change how the operator is called
filter.call(
   this.router.events, 
   (event:Event) => event instanceof NavigationEnd
).subscribe(x => console.log(x));

更多详情:管道操作员

秦俊友
2023-03-14

更新

对于RXJS 5. x版本:

导入'rxjs/add/operator/filter'

对于RXJS 6. x版本:

从“rxjs/operators”导入{filter}

RxJS团队设计了以下规则来帮助JavaScript开发人员重构导入路径:

  1. rxjs/operators:包含所有可管道化的运算符

从'rxjs/operators'导入{map,filter,scan}

import{Observable,Subject,asapScheduler,pipe,of,from,interval,merge,fromEvent}从'rxjs'导入

 类似资料:
  • 我使用“angular2网页包”和“angular2/表格,可见”,但遇到错误,需要帮助。。 有一个自定义表单验证程序-- 我可以找到文件"/projection_direction/node_modules/rxjs/操作员/DebounceTime.js" 为什么会有这样的错误- 类型“Observable”上不存在属性“debouceTime”。

  • 升级到Angular 6.0和Rxjs到6.0后,我收到以下编译错误:

  • 我得到这个错误: 属性'toPromise'不存在于类型'观察'. any中

  • 在Angular 2使用Http服务的文档页面上,有一个示例。 我克隆了angular2 webpack初学者项目,并自己添加了上述代码。 我导入使用 我假设属性也被导入(起作用)。查看了rxjs.beta-6的更改日志,没有提到任何关于的内容。

  • 我在尝试创建将keyup事件转换为可观察流时遇到问题。 我正在学习Ng书籍第6版。我被困在一个示例中,在您键入时搜索YouTube视频。当搜索返回时,我们将显示视频缩略图结果列表,以及每个视频的描述和链接。 因此,我们使用observable.from事件:https://github.com/NiLinli/ng-book2-angular-6-r68-code-samples/blob/mas

  • 在使用rxjs的角度2中,我试图将promise转换为可观察的。正如许多在线指南所显示的,我在上使用了。其中抛出错误: Observable的导入方式如下: 尝试导入像其他运算符一样会导致错误: 即使我抑制了typescript错误,它仍然会导致错误: 错误: rxjs回购协议中也报告了类似的问题,但也没有解决方案。