Vue.js 如何使用Electron菜单单击()事件更改Vue路由?

Vue.js 如何使用Electron菜单单击()事件更改Vue路由?,vue.js,electron,vue-router,Vue.js,Electron,Vue Router,在我的构建中,我可以通过路由器链接路由到每个组件,但不能通过菜单单击()事件 在菜单模板中,我尝试使用以下方法更改路线: 赢!。加载URL(“http://localhost:8080/login例如,它只是在运行构建时变为空白(对于任何URL) 另外,如果我导入路由器并尝试在主进程中使用router.push(),它将导致大量错误,并且也无法工作 但是,如果我使用electron:serve,而不是运行构建,那么它工作得很好。虽然它从菜单中重新加载页面,但与路由器链接不同,路由器链接保持在同一

在我的构建中,我可以通过路由器链接路由到每个组件,但不能通过菜单单击()事件

在菜单模板中,我尝试使用以下方法更改路线:

赢!。加载URL(“http://localhost:8080/login例如,它只是在运行构建时变为空白(对于任何URL)

另外,如果我导入路由器并尝试在主进程中使用router.push(),它将导致大量错误,并且也无法工作

但是,如果我使用electron:serve,而不是运行构建,那么它工作得很好。虽然它从菜单中重新加载页面,但与路由器链接不同,路由器链接保持在同一页面上,只是更改路由组件

我需要一个建立,改变路由视图都从菜单从路由器链接

那么,我如何从Electron菜单更改SPA的路径,并使其在最终构建中运行,因为它在运行开发项目时调用Electron:service可以正常工作

如何使用Electron菜单单击()事件更改Vue路由

完整项目:


您不能从Electron主进程内部更改路由或使用Vue路由器,因为您也不能从任何Vue组件内部访问Electron菜单,以便根据登录状态激活/停用子菜单(另一个疑问是我自己提出并回答的)

电子菜单应始终在电子主流程中进行管理

Vue路由应始终在Electron渲染器过程中进行管理-从Vue组件内部进行管理

因此,由于事件是在不同于应处理层的层上生成的,在这两种情况下,只需通过IPC消息通知其他层,您希望该事件发生更改,并且它将在适当的层上发生更改

在更改菜单的情况下,将在Vue组件内检查登录/注销Vuex状态,然后该组件向主进程发送IPC调用,并在主进程中激活或停用子菜单。 请参见链接上的此解决方案:

另一个类似的解决方案是针对此post问题的解决方案,但情况正好相反:

要更改路由,不应在主进程端使用win.loadURL()或win.loadFile(),而应使用win!向渲染器端(在本例中为App.vue组件)发送IPC调用!。例如,send(“changeRouteTo”和“/”)。“changeRouteTo”是一个自定义通道名称,“/”是路由器从渲染器端的Vue组件内部将路由更改为的路径-“/”是“主”路由。要更改为“登录”路径,路径将为“/Login”,依此类推。。。根据router.ts配置。在渲染器端,在本例中的App.vue组件中,为“changeRouteTo”通道或事件设置IPC渲染器侦听器,并且每次从主进程接收到路由更改请求时,都使用此组件内部的。$router.push()将路由更改为相应的路由

当使用npm run-electron:service运行项目时,以及在调用npm run-electron:build并创建bundle之后的最终构建执行时,这应该适用于开发环境和非开发环境

希望此解决方案对其他人有用

在这里查看完整的最终项目,这是一个非常好的示例应用程序:

生成后不运行开发服务器->_http://localhost:8080 应该不存在吗?