Javascript 在vue和electron之间共享一个存储

Javascript 在vue和electron之间共享一个存储,javascript,vue.js,electron,vuex,store,Javascript,Vue.js,Electron,Vuex,Store,我想在electron的main.js中存储一些数据,以便运行vue的窗口能够反应性地显示这些数据。我在store/index.js中声明了一个存储,包括状态和突变。当从electron和vue访问时,这确实有效,但不会在这些上下文之间共享数据。所以基本上vue并没有得到电子内部提交的数据 我如何从我的主electron环境提交到一个商店,并在我的vue窗口中反应性地显示更改? store/index.js 从“Vue”导入Vue; 从“Vuex”导入Vuex; Vue.use(Vuex); 导

我想在electron的
main.js
中存储一些数据,以便运行vue的窗口能够反应性地显示这些数据。我在
store/index.js
中声明了一个存储,包括状态和突变。当从electron和vue访问时,这确实有效,但不会在这些上下文之间共享数据。所以基本上vue并没有得到电子内部提交的数据

我如何从我的主electron环境提交到一个商店,并在我的vue窗口中反应性地显示更改?

store/index.js

从“Vue”导入Vue;
从“Vuex”导入Vuex;
Vue.use(Vuex);
导出默认的新Vuex.Store({
状态:{值:'},
突变:{
设置:(状态,有效载荷)=>{
state.value=有效载荷;
}
}
});
main.js

从“Vue”导入Vue;
从“/App.vue”导入应用程序;
导入“/registerServiceWorker”;
从“/router”导入路由器;
从“/store”导入存储;
从“/plugins/vuetify”导入vuetify;
新Vue({
路由器,
商店,
vuetify,
渲染:(h)=>h(应用程序),
}).$mount(“#app”);
App.vue


{{$store.state.value}
从“/store”导入存储;
导出默认值{
数据:()=>({
}),
创建(){
//此处提交将显示值
提交(“set”,“dummy1”);
}
}
background.js

“严格使用”
从“/store”导入存储;
从“electron”导入{app,protocol,BrowserWindow}
从“vue cli插件electron builder/lib”导入{createProtocol}
从“electron DEVTOOLS installer”导入installExtension,{VUEJS_DEVTOOLS}
//在应用程序准备就绪之前,必须注册方案
协议.注册表SchemesSprivileged([
{方案:'app',权限:{secure:true,standard:true}
])
异步函数createWindow(){
//创建浏览器窗口。
const win=新浏览器窗口({
宽度:800,
身高:600,
网络首选项:{
节点集成:process.env.ELECTRON\u NODE\u集成
}
})
if(process.env.WEBPACK\u DEV\u SERVER\u URL){
//如果处于开发模式,请加载开发服务器的url
wait win.loadURL(process.env.WEBPACK\u DEV\u SERVER\u URL)
}否则{
createProtocol('应用程序')
//不在开发中时加载index.html
win.loadURL('app://./index.html')
}
}
//关闭所有窗口后退出。
app.on('window-all-closed',()=>{
//在macOS上,应用程序及其菜单栏很常见
//在用户使用Cmd+Q明确退出之前保持活动状态
if(process.platform!=='darwin'){
app.quit()
}
})
app.on('activate',()=>{
//在macOS上,当
//已单击停靠图标,并且没有其他窗口打开。
如果(BrowserWindow.getAllWindows().length==0)createWindow()
})
//此方法将在Electron完成后调用
//初始化并准备好创建浏览器窗口。
//某些API只能在此事件发生后使用。
app.on('ready',async()=>{
createWindow()
//此处提交不会显示更改
提交(“set”,“dummy2”);
})
//在开发模式下,根据父进程的请求干净地退出。
if(ISD开发){
如果(process.platform==='win32'){
process.on('消息',(数据)=>{
如果(数据==‘优雅退出’){
app.quit()
}
})
}否则{
process.on('SIGTERM',()=>{
app.quit()
})
}
}
我怀疑这确实创建了两个不共享其内容的独立存储

这实际上创建了两个独立的 确切地在两个不同的过程中

但这里有两种可能的方法:

  • 使用IPC
  • 试试这个软件包(它在引擎盖下也使用IPC)