Электронные уведомления
Я пытаюсь заставить работать уведомления для приложения Electron, созданного с использованием Angular 5 и Electron. До сих пор у меня есть следующий код в моем файле index.html:
<script type="text/javascript">
function doNotify() {
new Notification( "Basic Notification", "Short message part");
}
window.onload = doNotify;
</script>
В моем package.json у меня есть настройка appId, как показано ниже:
"build": {
"appId":"com.myapp.id"
},
и наконец у меня есть это в моем main.js:
app.setAppUserModelId("com.myapp.id");
Как я читал в некоторых местах, оба они необходимы для работы уведомлений. Я использую Electron Forge для создания установщика белка, так как это также упоминается, чтобы получить уведомления для работы.
Я попытался использовать подобный код уведомления в моих угловых компонентах, но мне тоже не повезло. Я посмотрел на узел-уведомитель, но не смог заставить его работать, в основном из-за отсутствия понимания того, куда он должен идти в приложении Angular-Electron.
На данный момент все, что я хочу, - это чтобы какая-то форма уведомлений на рабочем столе работала, но я не могу найти какие-либо ресурсы о том, как это сделать, в приложении Angular-Electron.
2 ответа
Вы также можете получать электронные уведомления, работающие с angular 5, используя удаленный сервис Electron и модуль Node-Notifier, как:
app.component.ts
import { ElectronService } from 'ngx-electron';
constructor(private databaseService: DatabaseService, private router: Router, private
_electronService: ElectronService){
}
ngOnInit(): void {
let main_js = this._electronService.remote.require("./main.js");
this.main_js.notifier("Message");
}
main.js
const notifier = require('node-notifier')
exports.notifier = (msg) => {
notifier.notify({
title: 'Notify Me',
message: msg,
wait: true
});
Как было сказано Майком выше, решение действительно должно было идти с узлом-уведомителем. Сначала я не смог заставить его работать напрямую через angular из-за того, что он был модулем узла. После дальнейшего изучения я обнаружил, что в Electron вы можете отправлять сообщения в ipcRenderer, который затем может запускать код / модули узла. Ниже мой код, который использовал это для работы:
В моем угловом файле, с которого я хочу начать уведомление, я добавил:
import { ElectronService } from 'ngx-electron';
//
//Other regular angular code here
//
constructor(private databaseService: DatabaseService, private router: Router, private
_electronService: ElectronService){
}
ngOnInit(): void {
this._electronService.ipcRenderer.send('request-mainprocess-action', "Message");
}
Затем в моем main.js я добавил следующее:
const {ipcMain} = require('electron');
var notifier = require('node-notifier');
//
//Other regular electron main code
//
// Attach listener in the main process with the given ID
ipcMain.on('request-mainprocess-action', (event, arg) => {
notifier
.notify({title: 'Title', message: 'Message', icon:`${__dirname}\\assets\\image.png`, wait: true }, function(err, data) {
console.log(err, data);
})
});
В приведенном выше коде происходит отправка сообщения в ipcRenderer с тегом "request-mainprocess-action". Затем в моем main.js есть слушатель, который прослушивает это сообщение и выполняет необходимую обработку узла. Там могли быть учебники о том, как это сделать, но я не смог найти ни одного.