rit*_*078 54 javascript rxjs angular
嗨,我正在使用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))
Run Code Online (Sandbox Code Playgroud)
event可以是instanceOf NavigationEnd,NavigationStart或者RoutesRecognized我只想要NavigationEnd.但我得到一个错误
Property 'filter' does not exist on type Observable<Event>
在编译期间.
当我导入整个rxjs库时,错误消失.我应该导入什么才能使它工作而不加载完整的rxjs库?
can*_*idJ 96
UPDATE
对于RXJS 5.x版本:
import 'rxjs/add/operator/filter';
对于RXJS 6.x 版本:
import { filter } from 'rxjs/operators';
在下面的规则已经被设计为通过RxJS团队来帮助JavaScript开发人员重构进口路径:
rxjs/operators:包含所有可管道运算符.
import { map, filter, scan } from 'rxjs/operators';
rxjs:包含创建方法,类型,计划程序和实用程序.
import { Observable, Subject, asapScheduler, pipe, of, from, interval, merge, fromEvent } from 'rxjs';
Pet*_*cek 34
此方案有几种可能的修复方法.
与rxjs/add/operator/*中的"补丁"运算符相比,可管理运算符是一种更好的方法来提取所需的运算符
import { filter } from 'rxjs/operators';
// ..
this.router.events.pipe(
filter((event:Event) => event instanceof NavigationEnd)
).subscribe(x => console.log(x))
Run Code Online (Sandbox Code Playgroud)
将import语句更改为import 'rxjs/add/operator/filter'.这将修改Observable.prototype并添加filter方法到Observable类的每个实例.
有两个后果:
filter()方法会神奇地出现Observable)该声明import 'rxjs/operator/filter'完全有效.它只会导入运营商.这种方法不会搞乱Observable.prototype.在不利方面,它将使连锁几个运营商变得更加困难.
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));
Run Code Online (Sandbox Code Playgroud)
更多细节:可管理的操作员
Ian*_*amz 17
角度更新(5.x到6.x)还附带了从5.x到6.x的rxjs更新所以简单地添加
import { filter } from 'rxjs/operators';
Run Code Online (Sandbox Code Playgroud)
然后
this.router.events.pipe(
filter((event:Event) => event instanceof NavigationEnd)
).subscribe(x => console.log(x))
Run Code Online (Sandbox Code Playgroud)
希望这有助于某人
小智 7
在使用Angular 6升级更新到Rxjs 6之后
import { map, filter, scan } from 'rxjs/operators';
...
this.registrationForm.valueChanges
.pipe(
filter(() => this.registrationForm.valid),
map((registrationForm: any) => {
this.registrationVm.username = registrationForm.username;
this.registrationVm.password = registrationForm.password;
this.registrationVm.passwordConfirm = registrationForm.passwordConfirm;
})
)
.subscribe();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42304 次 |
| 最近记录: |