Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 6 RXJS导入语法?_Angular_Rxjs_Angular Observable - Fatal编程技术网

Angular 6 RXJS导入语法?

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

我正在将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/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
  • 参考资料:


    管道是操作员前进所需的

    版本:rxjs 6.0.1

    例如:

    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 get
    rxjs-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';