Angular 6 RXJS导入语法?
我正在将Angular 5应用程序迁移到最新的CLI和Angular 6 RC,所有可观察的导入都已中断。我看到Angular 6改变了导入的工作方式,但是我找不到任何关于语法如何工作的明确参考 我在5年内做了这个,效果很好:Angular 6 RXJS导入语法?,angular,rxjs,angular-observable,Angular,Rxjs,Angular Observable,我正在将Angular 5应用程序迁移到最新的CLI和Angular 6 RC,所有可观察的导入都已中断。我看到Angular 6改变了导入的工作方式,但是我找不到任何关于语法如何工作的明确参考 我在5年内做了这个,效果很好: import { Observable } from 'rxjs/Observable'; import 'rxjs/add/operator/map'; import 'rxjs/add/operator/catch'; import 'rxjs/add/observa
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';
现在有了新的语法,我明白了
import { Observable, Subject, throwError} from 'rxjs';
import { map } from 'rxjs/operators';
前两行可以编译,但我不知道如何获取catch和throw,例如。map()在代码中使用时也会引发生成错误
有人知道这应该如何工作吗?From,catch
已重命名为catchError
函数,以避免名称冲突
由于运算符独立于可观察对象可用,因此运算符名称不能与JavaScript关键字限制冲突。因此,某些运算符的可管道版本的名称已更改
对于throw
,您可以使用ErrorObservable
import { ErrorObservable } from 'rxjs/observable/ErrorObservable';
ErrorObservable.create(new Error("oops"));
rxjs 6
而不是可观察的使用
此外,您现在还必须通过管道传输操作符,而不是直接将它们链接到可观察的,或者如果您想继续使用版本
6.0.0
,您可以这样做
npmi——保存rxjs compat
要添加反向兼容性请在运行
ng update
后运行这两个命令。这将修复rxjs导入:
npm i-g rxjs tslint
rxjs-5-to-6-migrate-p src/tsconfig.app.json
import { Observable } from "rxjs";
import { map } from "rxjs/operators";
Observable.create((observer: any) => {
observer.next('Hello')
}).pipe(map((val: any) => val.toUpperCase()))
.subscribe((x: any) => addItem(x))
function addItem(val: any) {
console.log('val', val);
}
//output - (In uppercase)
HELLO
您只需要像操作符一样导入
不确定这是否是您要求的,但如果您还没有重构代码本身,则需要重构代码本身。有新的
管道
语法。例如,yourObservable$.pipe(map(val=>val*2)).subscribe()
。因此,在这种导入中,您不会使用yourObservable$.map(blah)
。这里有一些参考:See看起来您现在可以进行ng升级以自动添加(同时将Angular project Ref更新为最新版本)。没有ng upgrade
命令ng update
您的意思是,它没有添加packagethrow现在有了一个新名称,即throwError,您可以这样导入它:从“rxjs”导入{throwError};从“rxjs”导入它不会带来整个模块吗?导入的更具体路径是什么?@KeyvanSadralodabai不适用于rxjs v6。显然,它们已经根据如何将rxjs-5-to-6-migrate
迁移到PATH变量中进行了更改?运行npm I-g rxjs tslint
,然后运行rxjs-5-to-6-migrate
I getrxjs-5-to-6-migrate未被识别为内部或外部命令
import { throwError } from 'rxjs'
throwError(new Error("oops"));
import { Observable } from "rxjs";
import { map } from "rxjs/operators";
Observable.create((observer: any) => {
observer.next('Hello')
}).pipe(map((val: any) => val.toUpperCase()))
.subscribe((x: any) => addItem(x))
function addItem(val: any) {
console.log('val', val);
}
//output - (In uppercase)
HELLO
import { Observable } from 'rxjs';
import { map, catchError, timeout } from 'rxjs/operators';