我正在使用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;
});
?
答案 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