您好,登錄后才能下訂單哦!
最近是在使用Electron+Vue構建一個基于modbus rtu協議的上位機應用,使用ipcMain和ipcRenderer實現點擊Vue組件后打開對話框,獲取到文件路徑并寫入數據,完成后通知。但是出現ipcRenderer.on() 調用多次的錯誤情況。
那么,使用Electron+Vue實現文件保存的正確姿勢是什么呢?
在electron的src/main/index.js中定義IPC通道
// 1. 引入對話框與IPC通信模塊
const ipc = require('electron').ipcMain
const dialog = require('electron').dialog
// 2.定義IPC主進程響應函數
ipc.on('open-save-chart-dialog', function (event) {
dialog.showSaveDialog({
title: '保存圖像文件',
defaultPath: '/',
filters: [
{
name: 'Images',
extensions: ['png', 'jpg']
}
]
}, function (filename) {
// 通知渲染進程,將獲取到的文件路徑傳給Vue組件中響應函數
event.sender.send('save-finished', filename);
})
})
在Vue的組件中定義觸發函數和響應函數,這里是MainPage.vue
(1)首先為Button綁定Click點擊事件:
<Button type="info" @click="handleSaveChart">保存</Button>
(2)接下來在script代碼塊的methods中定義handleSaveChart方法
export default {
methods: {
handleSaveChart: function () {
// 向IPC通道發送信號,此時主線程收到信號立即執行相對應的響應函數
const ipc = require('electron').ipcRenderer;
ipc.send('open-save-chart-dialog');
}
}
}
(3)在Vue組件的created方法中定義主線程向渲染線程發送信號的響應函數
created() {
const ipc = require('electron').ipcRenderer;
ipc.on('save-finished', function (event, filename) {
// 當filename等于null的時候表示用戶點擊了取消按鈕
// 當用戶點擊保存按鈕的時候filename的值是對應文件的絕對路徑
console.log(filename)
})
}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。