0

この例を で実行したいと思いrxjs5ます。しかし、うまくいきません。私は#41 行で立ち往生しています。マップが返さSubjectれ、メソッドがありません.takeUntil。それを実装する最良の方法は何ですか?ありがとう

4

2 に答える 2

2

あなたの例は本当に古いtoRx()です。廃止され、ずっと前に削除されたようなものを使用しています。この例では EventEmitters も使用しており、それらをサブスクライブしていますが、それを行うべきではありません。また、DOM を使用して値を設定しているため、これもnativeElement行うべきではありません

そのため、例を少し変更しました

  • EventEmitter を削除し、Subject に置き換えました
  • 削除されましtoRx()た。もう必要ありません
  • Renderer を使用して要素のcursorとを設定しました。position

これは、コードがどのように見えるかの小さなスニペットです。それほど違いはありません。

  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));

  }

これが完全な例です。

于 2016-03-20T13:37:06.403 に答える
0

あなたのレポから、古いバージョンの を使用しているようですAngular2 packages
しかし、これを試してみてもいいですし、Eric Martinezがすばらしい動作デモを提供してくれています。

'rxjs/Rx' をインポートします。

于 2016-03-20T13:41:22.667 に答える