Observable.bindCallback()上的zone.run()

时间:2018-03-11 02:07:05

标签: angular rxjs electron angular2-observables zone.js

我正在使用Electron,你可能知道,所有Electron的调用都在Angular的HookupNavigationButtons(this);之外运行。因此,在使用Electron方法时,您需要在某个时刻调用zone

典型的电子呼叫看起来像这样(注意zone.run()):

zone.run()

以上作品完全正常。我是一个快乐的人。我现在可以走开,接受这个。但是,我想用 this.remote.dialog.showOpenDialog( { properties: ['openDirectory'], }, (directories) => { const projectName = path.basename(directories[0]); this.zone.run(() => { cb(projectName); }); }, ); 写这个,所以它与应用程序的其他方面很好地连接。

Observables

我在哪里放 const openDialog = Observable.bindCallback(this.remote.dialog.showOpenDialog); return openDialog({ properties: ['openDirectory'], }).map((directories) => { const projectName = path.basename(directories[0]); // WHERE DO I PUT ZONE.RUN? return projectName; });

3 个答案:

答案 0 :(得分:1)

zone.js包含用于覆盖rxjs / electron api修补的文档:https://github.com/angular/zone.js/blob/master/NON-STANDARD-APIS.md#usage

答案 1 :(得分:0)

为什么不在订阅完成之内加上“运行”提示:

}).map((directories) => {
        const projectName = path.basename(directories[0]);
        this.zone.run();  // <---- Right here?
        return projectName;
    });

答案 2 :(得分:0)

所有电子API均已修补,您需要在加载polyfill.ts后将此行放入zone.js

//import 'zone.js/dist/zone'; // originally added by angular-cli, comment it out
import 'zone.js/dist/zone-mix'; // add zone-mix to patch both Browser and Nodejs
import 'zone.js/dist/zone-patch-electron'; // add zone-patch-electron to patch Electron native API

我还创建了一个样本仓库https://github.com/JiaLiPassion/zone-electron