RxJS:如何将event.preventDefault()作为drop事件?

Pip*_*ipo 7 javascript rxjs

我的加价:

<section id="drop-target">
  Drop file here...
</section>
Run Code Online (Sandbox Code Playgroud)

我的代码:

var dropTarget = document.getElementById('drop-target');

Rx.Observable.fromEvent(dropTarget, 'dragover').subscribe(function(event) {
  event.preventDefault();
});

var dropStream = Rx.Observable.fromEvent(dropTarget, 'drop');

dropStream.subscribe(function(event) {
  console.log('This will be called.');
  event.preventDefault();
});

dropStream.map(function(event) {
  console.log('This will not be called.');
  return event.dataTransfer.files[0].path;
});
Run Code Online (Sandbox Code Playgroud)

有关如何map调用我的上次回调的任何想法?我需要两个preventDefaultS代表dropdragover以防止浏览器打开该文件.

Bra*_*don 6

您只需订阅您的信息map流即可.所有这些map都是创建一个新的observable,它将map在流上运行操作.但你仍然需要订阅让它做一些事情:

dropStream
    .map(function (event) {
        console.log("hello");
        return event.dataTransfer.files[0].path;
    })
    .subscribe(function (path) {
        console.log("path=" + path);
    });
Run Code Online (Sandbox Code Playgroud)