利用Electron简单撸一个Markdown编辑器的方法

2020-06-14 06:02:16易采站长站整理

class="column"
ref="previewor"></preview>
</div>
</div>

编辑区

左侧使用插件:

require('vue2-ace-editor')
,处理实时监听
Editor
输入 Markdown 内容,将内容传出去。


watch: {
input: function(newContent, oldContent) {
messageBus.newContentToRender(newContent);
}
},

其中这里的

messageBus
就是把 vue 和 ipcRenderer 相关逻辑事件放在一起的
main.js


import Vue from 'vue';
import App from './App';
import 'buefy/dist/buefy.css';
import util from 'util';
import { ipcRenderer } from 'electron';

if (!process.env.IS_WEB) Vue.use(require('vue-electron'))
Vue.config.productionTip = false

export const messageBus = new Vue({
methods: {
newContentToRender(newContent) {
ipcRenderer.send('newContentToRender', newContent);
},
saveCurrentFile() { }
}
});

// 监听 newContentToPreview,将 url2preview 传递给 vue 的newContentToPreview 事件
// 即,传给 Preview 组件获取
ipcRenderer.on('newContentToPreview', (event, url2preview) => {
console.log(`ipcRenderer.on newContentToPreview ${util.inspect(event)} ${url2preview}`);
messageBus.$emit('newContentToPreview', url2preview);
});

/* eslint-disable no-new */
new Vue({
components: { App },
template: '<App/>'
}).$mount('#app')

编辑器的内容,将实时由

ipcRenderer.send('newContentToRender', newContent);
下发出去,即由 Main 进程的
ipcMain.on('newContentToRender', function(event, content)
事件获取。

一个 Electron 应用只有一个 Main 主进程,很多和本地化东西 (如:本地存储,文件读写等) 更多的交由 Main 进程来处理。

如本案例中,想要实现的第一个功能就是,「可以自定义固定模块,如文章的头部,或者尾部」

我们使用一个插件:

electron-store
,用于存储头部和尾部内容,创建Class:


import {
app
} from 'electron'
import path from 'path'
import fs from 'fs'
import EStore from 'electron-store'

class Content {
constructor() {
this.estore = new EStore()
this.estore.set('headercontent', `<img src="http://bimage.coding01.cn/logo.jpeg" class="logo">
<section class="textword"><span class="text">本文 <span id="word">111</span>字,需要 <span id="time"></span> 1分钟</span></section>`)