Electron-vue开发实战(三)| Render进程开发
对于electron-vue
而言,renderer进程其实大部分就是在写我们平时常写的前端页面
安装Element UI⁍
Element UI⁍
Element UI是饿了么开发的一套开源的基于Vue的UI框架,属于Javascript UI框架,与CSS UI框架(Bootstrap等)不同,除了提供CSS的修饰,还提供了更加遍历的控件操作方法。[1]
通过组件 | Element快速查看可用的组件。
安装Element UI并更换主题⁍
1 |
|
(未成功)安装主题工具⁍
1 |
|
安装白垩主题
1 |
|
初始化变量文件
主题生成工具安装成功后,如果全局安装可以在命令行里通过 et
调用工具,如果安装在当前目录下,需要通过 node_modules/.bin/et
访问到命令。执行 -i
初始化变量文件。默认输出到 element-variables.scss
,当然你可以传参数指定文件输出目录。
1 |
|
非全局安装
1 |
|
报错[2]
graceful-fs 与 node 版本不兼容
(各种处理见 { % post_link “Electron-vue开发实战(一)plus- Node16.8.0不降级安装Electron-vue+ElementUI开发环境” %} )
其他主题⁍
element-ink-theme
: 指南 | Ink (elpsy.cn)
引入/按需引入(后期待改)⁍
在src/renderer/main.js
中写入
1 |
|
Render进程开发⁍
在开发模式下,由于使用的是webpack-dev-server
开启的服务器,所以BrowserWindow
加载的是来自于类似http://localhost:9080
这样的地址的页面。
而在生产模式下,却是使用的file://
的协议,比如file://${__dirname}/index.html
来指定窗口加载的页面。
假如我有一个子路由地址为child
。如果不启用Hash模式,在开发模式下没啥问题,http://localhost:9080/child
,但是在生产模式下,file://${__dirname}/index.html/child
却是无法匹配的一条路径。因此在electron下,vue-router
请不要使用history
模式,而使用默认的hash
模式。
👆 见Picgo
src\main\apis\app\window\constants.ts
自定义titlebar⁍
在创建的BrowserWindow
的配置里加上一句
1 |
|
然后你就可以自行在renderer进程的页面里模拟一个顶部的titlebar
了
在css样式里添加拖拽/不可拖拽
1 |
|
main进程和renderer进程的通信⁍
remote模块:渲染器进程访问主进程⁍
remote模块是electron为了让一些原本在Main进程里运行的模块也能在renderer进程里运行而创建的。
在electron-vue
里内置了vue-electron
这个模块,可以在vue里很方便的使用诸如this.$electron.remote.xxx
来使用remote的模块。
注意路径转义
shell⁍
让默认图片应用打开一张图片、让默认浏览器打开一个url。
具体api: shell | Electron (electronjs.org)
dialog⁍
打开原生对话框
api:dialog | Electron (electronjs.org)
实例:
需求:点击按钮,弹出hexo文章的根目录,选择相应文章,用默认应用(即typora打开)
1 |
|
深入remote模块⁍
注意:
remote即将被electron弃用,PicGo项目中实际也并没有用到这个模块
remote模块未主进程可以访问的模块创建一个镜像,以此提供一个代理,将渲染器进程需要执行的操作委托给主进程执行。
当调用remote对象的方法或属性是,它会想主进程发送一条同步消息,在主进程中执行相应的方法或属性,然后将结果发送回渲染器进程
从主进程向渲染器进程发送内容⁍
webContents⁍
webContents
其实是BrowserWindow
实例的一个属性,它存储了调用时的Web浏览器窗口对象,管理者渲染器进程中Web页面的生命周期,触发各种事件。
也就是如果我们需要在main
进程里给某个窗口某个页面发送消息,则必须通过win.webContents.send()
方法来发送。
ipcMain和ipcRenderer⁍
通过ipcMain
和ipcRenderer
来实现非父子组件通信
其中ipcMain
是在main
进程里使用的,而ipcRenderer
是在renderer
进程里使用的。
1 |
|
1 |
|
其中ipcMain
只有监听来自ipcRenderer
的某个事件后才能返回给ipcRenderer
值。而ipcRenderer
既可以收,也可以发。
ipcMain
无法主动发消息给ipcRenderer
。因为ipcMain只有.on()
方法没有.send()
的方法。(要用webContent)
📜使用ipcMain和ipcRender实现伪窗口的关闭和最小化⁍
1 |
|
1 |
|
- 注意script里面的函数要按照html代码里引用的顺序来写
朱建昕《Spring Boot+Vue开发实战》 ↩︎
https://blog.csdn.net/qq1808814025/article/details/120234560 ↩︎