Angular Observable.bindCallback()上的zone.run()
我使用的是Electron,您可能知道,Electron的所有调用都在Angular的Angular Observable.bindCallback()上的zone.run(),angular,rxjs,electron,angular2-observables,zone.js,Angular,Rxjs,Electron,Angular2 Observables,Zone.js,我使用的是Electron,您可能知道,Electron的所有调用都在Angular的区域之外运行。因此,在使用Electron方法时,需要在某个时候调用zone.run() 典型的Electron调用如下所示(注意区域.run()): 上述方法非常有效。我是一个快乐的人。我可以马上离开,接受这个。然而,我想用可观察对象来写这篇文章,因此它与应用程序的其他方面有很好的联系 const openDialog = Observable.bindCallback(this.remote.dia
区域之外运行。因此,在使用Electron方法时,需要在某个时候调用zone.run()
典型的Electron调用如下所示(注意区域.run()
):
上述方法非常有效。我是一个快乐的人。我可以马上离开,接受这个。然而,我想用可观察对象来写这篇文章,因此它与应用程序的其他方面有很好的联系
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;
});
我应该把zone.run
?zone.js放在哪里?有关于rxjs/electron api补丁的文档:为什么不在完成订阅的过程中加入“run”提示:
}).map((directories) => {
const projectName = path.basename(directories[0]);
this.zone.run(); // <---- Right here?
return projectName;
});
}).map((目录)=>{
const projectName=path.basename(目录[0]);
this.zone.run();//所有electron API都已修补,加载zone.js
后需要将此行放入polyfill.ts
//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
我还创建了一个示例repo,因为这是无效的语法。您需要执行this.zone(()=>{//INSIDE zone NOW})
//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