renderer.js
ipcRenderer.sendSync('setGlobal', 'globalVarName').varInner.varInner2 = 'result';
main.js
global.globalVarName = {
varInner: {
varInner2: ''
},
iWontChange: 'hi'
};
ipcMain.on('setGlobal', (event, arg) => {
console.log(arg) // should print "result"
// what goes here?
})
console.log(varInner2) // should print "result"
是否可以这样,即以这种方式设置varInner2
globalVarName
?其次,有没有办法对此进行优化,因此我们不必为每个全局变量重写此过程(即使用动态变量名称执行此操作的某种方式)?
我感谢任何想法或解决方案,对不起,如果这是一个常识问题。
答案 0 :(得分:3)
当您只想读取全局变量的值时,使用getGlobal
会非常有用。但是,我发现尝试使用getGlobal
分配或更改其值是有问题的。
就我而言,我发现Main进程上的全局变量没有实际更改。具体来说,当刷新开发中的Electron窗口时,全局变量将重新设置为其原始值。这使得恢复开发状态成为一个问题。
不确定这是否还会在生产中发生,但我想会发生,因此,依赖于全局变量的最新值来拆分新流程将是有问题的。
相反,我最终使用了更详细的方法ipcMain
和ipcRenderer
。
main.js
const { ipcMain } = require( "electron" );
ipcMain.on( "setMyGlobalVariable", ( event, myGlobalVariableValue ) => {
global.myGlobalVariable = myGlobalVariableValue;
} );
renderer.js
const { ipcRenderer, remote } = require( "electron" );
// Set MyGlobalVariable.
ipcRenderer.send( "setMyGlobalVariable", "Hi There!" );
// Read MyGlobalVariable.
remote.getGlobal( "MyGlobalVariable" ); // => "Hi There!"
答案 1 :(得分:1)
来不及回答,但希望这会对我们未来的访问者有所帮助。 因此,基于以下IPC方法,我能够创建,访问和更新全局变量的值:
1)将此代码添加到main.js文件中:
func numberOfSections(in tableView: UITableView) -> Int {
return invoicesSectionTitles.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let invoiceKey = invoicesSectionTitles[section]
if let invoiceValues = invoicesDictionary[invoiceKey] {
return invoiceValues.count
}
return 0
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
let invoiceKey = invoicesSectionTitles[indexPath.section]
if let invoiceValues = invoicesDictionary[invoiceKey] {
cell.textLabel?.text = invoiceValues[indexPath.row]
}
return cell
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return invoicesSectionTitles[section]
}
func sectionIndexTitles(for tableView: UITableView) -> [String]? {
return invoicesSectionTitles
}
2)在第一页上使用它来更新全局变量值:
global.MyGlobalObject = {
variable_1: '12345'
}
3)最后,在第二页上使用类似的内容,在该页面上,您将访问修改后的全局变量并进行打印:
require('electron').remote.getGlobal('MyGlobalObject').variable_1= '4567'
您可以在电子的documentation中找到相同的东西。