Плагин vue-electronic-builder - передача данных формы из vue в основной электронный процесс

Я создаю кроссплатформенное электронное приложение, используя vuejs и плагин vue-cli-electronic-builder. У меня есть поле ввода в форме, которое даст пользователю возможность отправить форму с некоторыми прикрепленными файлами, и я хочу обрабатывать файлы в фоновом процессе приложения. Как я могу отправить данные из пользовательского интерфейса vue в основной процесс электронного приложения?


person newbiedev    schedule 04.12.2020    source источник


Ответы (1)


В электроне есть два процесса: основной процесс и процесс рендеринга. Компонент Vue работает в процессе рендеринга. Однако запись файлов выполняется в основном процессе, который обычно обозначается background.js. Нам нужен способ связи между этими двумя процессами для записи данных. Этот способ называется inter-process communication. Электрон обеспечивает ipcMain & ipcRenderer для связи между двумя процессами.

Предположим, вам нужно отправить данные из формы (компонент Vue) в основной процесс. Начнем с определения настраиваемого события в background.js, например:

import {ipcMain} from "electron"; 

// this is the event listener that listens to the event emitted by the Vue component
ipcMain.on("form-submission-event", (event, args) => writeFormData(args));

В вашем компоненте Vue вы должны сделать следующее:

import {ipcRenderer} from "electron";

export default defineComponent({
     methods: {
         submitForm(data){
           // this will send the data to the main process
          ipcRenderer.send("form-submission-event", data)
          }
     }
}

Вы также можете передавать данные наоборот, то есть от основного процесса к процессу рендеринга. Подробнее читайте здесь: https://www.electronjs.org/docs/api/ipc-main и здесь https://www.electronjs.org/docs/api/ipc-renderer

Вы можете получить сообщение об ошибке, например, имя каталога не найдено. Чтобы исправить это, добавьте следующий код в vue.config.js

module.exports = {
  pluginOptions: {
    electronBuilder: {
      nodeIntegration: true
    }
  }

};

person Helper function    schedule 04.12.2020
comment
спасибо за ответ, я пытался добавить nodeIntegration, но получаю эту ошибку, когда запускаю приложение в режиме обслуживания ReferenceError: __dirname is not defined. Я попытался перезапустить процесс, но ошибка все еще осталась, я не уверен, что не так - person newbiedev; 04.12.2020
comment
Какую версию Vue и electronic вы используете? Кроме того, вы используете npm run electron:serve? или вы получаете ошибку с npm run serve? - person Helper function; 04.12.2020
comment
Я использую vue/cli 4.3.1 и создаю проекты с помощью vue ui, для плагина электронного строителя я использую версию "vue-cli-plugin-electron-builder": "^2.0.0-rc.5", в которой используется внутренний электронный "electron": "^9.0.0". Я использую команду npm run electron:serve из vue ui - person newbiedev; 04.12.2020
comment
Хорошо, не могли бы вы перейти на электрон 11? Может, это поможет. - person Helper function; 04.12.2020
comment
Я пытаюсь обновить его глобально, но когда я запускаю electron -v из терминала macOS, я получаю v3.0.0. Я пытался запустить npm uninstall electron && npm install electron@latest -g, но он всегда будет устанавливаться v3.0.0, может, я делаю это неправильно? - person newbiedev; 04.12.2020
comment
Внутри каталога вашего проекта попробуйте npm install [email protected]. - person Helper function; 04.12.2020
comment
на данный момент я удалил всю папку проекта и заново создал ее со всеми файлами. Странно то, что vue-cli-plugin-electron-builder всегда будет устанавливать версию ^9.0.0 of electronics, я проверил онлайн-репозиторий github и не уверен, но кажется, что плагин обновлен для установки электронного v11.0.3. Мне нужно попробовать установить электрон v11, как вы предложили, но я использую vue ui, поэтому я не знаю, будет ли обновлена ​​старая версия электрона? - person newbiedev; 04.12.2020
comment
ReferenceError: __dirname is not defined все еще остается и после обновления электрона до последней версии в качестве зависимости разработчика :( - person newbiedev; 04.12.2020
comment
Мне очень жаль! Я попробовал это еще раз, и это сработало. Не уверен, что с вами не так :( В любом случае, проверьте это nklayman.github.io/vue-cli-plugin-electron-builder/guide/ - person Helper function; 04.12.2020
comment
Уже видел и не работает в моем случае. Я использую vue-cli-plugin-electron-builder": "^2.0.0-rc.5 Думаю, это ошибка этого выпуска - person newbiedev; 04.12.2020