【问题标题】:Convert Subject to Observable [closed]将主题转换为 Observable [关闭]
【发布时间】:2016-03-20 13:06:52
【问题描述】:

我想用rxjs5 运行this example。但它不起作用。我一直坚持#41 line。它说 map 返回 Subject 并且它没有 .takeUntil 方法。实施它的最佳方法是什么?谢谢

【问题讨论】:

  • 你用的是哪个版本?
  • @micronyks 这是 5.0.0-beta.2

标签: angular rxjs rxjs5


【解决方案1】:

您的示例确实很旧,它使用了诸如 toRx() 之类的东西,这些东西很久以前就被弃用和删除了。该示例还使用了 EventEmitters 并订阅了它们,我们 should't do that 还使用 nativeElement 和我们 shouldn't do that either 为 DOM 设置值。

所以我稍微修改了这个例子

  • 我删除了 EventEmitter 并将其替换为 Subject
  • 已删除 toRx(),不再需要
  • 使用渲染器设置元素的cursorposition

这是代码现在的样子的小sn-p,并没有那么不同。

  constructor(public element: ElementRef, public renderer: Renderer) {
    this.renderer.setElementStyle(element.nativeElement, 'position', 'relative');
    this.renderer.setElementStyle(element.nativeElement, 'cursor', 'pointer');

    this.mousedrag = this.mousedown.map(event => {
        event.preventDefault();
        return {
          left: event.clientX - this.element.nativeElement.getBoundingClientRect().left,
          top:  event.clientY - this.element.nativeElement.getBoundingClientRect().top
        };
      })
      .flatMap(imageOffset => this.mousemove.map(pos => ({
        top:  pos.clientY - imageOffset.top,
        left: pos.clientX - imageOffset.left
      }))
      .takeUntil(this.mouseup));

  }

full example 正在运行。

【讨论】:

  • 非常感谢。现在我明白了:-)
  • 我喜欢“不应该那样做”的链接 :)
  • @MarkRajcok 哈哈:P
【解决方案2】:

从您的仓库看来,您使用的是旧版本的Angular2 packages
但是你可以试试这个,或者 Eric Martinez 为你提供了精彩的工作演示。

导入'rxjs/Rx';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2021-12-02
    • 1970-01-01
    相关资源
    最近更新 更多