18

私はドラッグアンドドロップアプリケーションを作成しており、マウスの位置にオブザーバブルを作成しましたdrag-object

mouseMove$: any;

constructor(){
  this.mouseMove$ = Observable.fromEvent(document, 'mousemove')
    .do((mouseevent: MouseEvent) => {
      if (document.getElementById("drag-object")){
        document.getElementById("drag-object").style.left = (mouseevent.clientX) + 'px';
        document.getElementById("drag-object").style.top = (mouseevent.clientY) + 'px';
      }
  });

この実装では、この方法でサブスクライブすることに問題はありません。

this.mouseMove$.subscribe();

ただし、次のいずれかで購読を解除できないようです。

this.mouseMove$.unsubscribe();

また

this.mouseMove$.dispose();

どちらの場合でも、次のタイプのエラーが発生します。

TypeError: this.mouseMove$.unsubscribe は関数ではありません ...

mouseMove$これが のタイプと関係があるかどうかはわかりませんが、タイプをおよびanyに設定しても機能しませんでした。ここで何が理解できませんか?ObservableObservable<MouseEvent>

4

4 に答える 4

44

おそらく、新しいバージョンの RxJS を使用している可能性があります。API の変更があり、ここでa をObservable.subscribe返し、Disposableそこから呼び出す.unsubscribeようになりました ( RxJS5 にdisposeなりunsubscribeました)。残念ながら、「古い方法」で行っている古いチュートリアルやブログ投稿がまだたくさんあるため、この混乱が生じています。

したがって、あなたのコードは

let disposeMe = this.mouseMove$.subscribe();

そして、あなたが終わった後

disposeMe.unsubscribe();

バージョン 4 から 5 への API の変更点の完全なリストについては、このファイルを確認してください。

于 2016-12-16T19:55:49.930 に答える