【问题标题】:RxJS Angular 2 SyntaxRxJS Angular 2 语法
【发布时间】:2016-07-15 03:32:29
【问题描述】:

我目前正在阅读 RxJS 库,并花一些时间阅读它的一些架构师和贡献者提供的一些课程,目的是将这些知识整合到 angular2 应用程序中。我发现这很困难,因为我似乎无法弄清楚如何更改语法,所以我可以使用 RxJS,就像我在任何不是 angular2 特定的示例中看到的那样。例如,如果我尝试在构造函数中创建观察者:

this.$mouseObserver = Rx.Observer.create(
      function (x) {
     console.log('Next: %s', x);
   },
   function (err) {
     console.log('Error: %s', err);
   },
   function () {
     console.log('Completed');
   });

Rx 总是出现未定义,即使在导入之后也是如此。 Observer 和 Observable 导入很好,以及它们的方法。我错过了一些基本的东西吗? RxJS 的每篇文档几乎都以 Rx. 开头,但我还没有看到使用该语法的单个 Angular 2 教程。

【问题讨论】:

    标签: typescript angular reactive-programming rxjs observable


    【解决方案1】:

    如果你:

    import { Observer } from 'rxjs/Observer';
    

    或:

    import { Observer } from 'rxjs/Rx';
    

    您将使用Observer.create(没有 Rx。)。要使用Rx.Observer,您需要import * as Rx from 'rxjs/Rx';

    通常首选导入单个类/对象,这就是为什么您会看到更多该表单的导入。 Rx. 表单通常出现在没有导入 Rx 库的地方(例如,项目不是内置在 node 环境中),而是从 <script src="..."> 标记引用

    编辑:回答 C. Kearns 的评论:

    Observer,在 RxJS 5 类型定义中,是一个接口。它没有实现,也没有编译成 javascript。因此你不能调用它的任何函数。接口声明为:

    export interface Observer<T> {
        isUnsubscribed?: boolean;
        next: (value: T) => void;
        error: (err: any) => void;
        complete: () => void;
    }
    

    在您的情况下,将$mouseObserver 声明为Observer&lt;any&gt;,这应该可以:

    this.$mouseObserver = {
      next: function (x) {
        console.log('Next: %s', x);
      },
      error: function (err) {
        console.log('Error: %s', err);
      },
      complete: function () {
        console.log('Completed');
      }
    };
    

    【讨论】:

    • 这很有意义。但是,只导入 Observer,使用 this.$mouseObserver= Observer.create 我得到错误:cannot find name 'Observer',导入 import * as Rx from 'rxjs/Rx'; 并使用 Rx.Observer.create 给我错误 `property observer does not exist on typeof
    • 这也适用于 Observables。我在使用Rx 时遇到了完全相同的问题。我想从一个数组创建一个 Observable,但不知何故被困在Rx。我在这里有一个问题http://stackoverflow.com/questions/43177833/unable-to-import-rx-to-my-angular-2-application,@Can Nguyen 你能提供答案吗?
    • 使用建议的导入,同时使用 Observable.from([1,2,3])。我在from 上收到错误消息。从import 'rxjs/add/observable/from' 导入from 也无济于事。
    猜你喜欢
    • 2018-09-23
    • 1970-01-01
    • 2017-03-20
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 2017-08-21
    相关资源
    最近更新 更多