Я пишу приложение Electron (node.js) с интерфейсом AngularJS. Из-за того, что node.js работает на уровне ОС и работает на угловом уровне на уровне клиента, они разговаривают друг с другом с помощью IPC (или в этом случае ipc реализуется https://github.com/develephant/electangular).
В этом случае, у меня есть служба, которая используется для огня сообщение IPC к приложению узла:
app.service('msgService', ['ipc', '$rootScope', '$q', function(ipc, $rootScope, $q){
this.sendMsg = function(type, value) {
var message = {
type: type,
value: value
};
ipc.send(message);
};
}]);
Эта услуга вводится в, и призвал с помощью контроллера, главный контроллер:
app.controller('mainController', ['$scope', '$rootScope', 'electron', 'msgService', 'hey', function($scope, $rootScope, electron, msgService, hey){
msgService.sendMsg('db_find', {});
// I can see the variable inside this console.log
console.log($rootScope);
// I get undefined here
console.log($rootScope.msg);
}]);
После того, как приложение узел генерируется запрос, он посылает сообщение обратно через МПК, который затем подобран кусок кода в .run секции углового приложения:
app.run(['$window', '$rootScope', function($window, $rootScope) {
$rootScope.$on('electron-msg', (event, msg) => {
$rootScope.msg = msg;
});
}]);
Вышеприведенное просто устанавливает свойство msg в переменной $ rootScope внутри run, и я ожидаю, что вы сможете получить доступ из моего контроллера. Вы заметите по комментариям на консольных страницах, что я могу получить доступ к $ rootScope, и значение возвращается, однако, когда я пытаюсь и самостоятельно регистрировать $ rootScope.msg, я получаю «неопределенный». Это также верно для попытки установить переменную из переменной $ rootScope.msg - я получаю undefined.
Я пробовал все с этим, и я полностью в конце моего троса!
Любая помощь очень ценится :)
EDIT:
Ниже выход console.log ($ rootScope); в соответствии с запросом:
Scope {$id: 1, $$childTail: ChildScope, $$childHead: ChildScope, $$prevSibling: null, $$nextSibling: null…}
$$ChildScope
:
ChildScope()
$$applyAsyncQueue
:
Array[0]
$$asyncQueue
:
Array[0]
$$childHead
:
Scope
$$childTail
:
Scope
$$destroyed
:
false
$$isolateBindings
:
null
$$listenerCount
:
Object
$$listeners
:
Object
$$nextSibling
:
null
$$phase
:
null
$$postDigestQueue
:
Array[0]
$$prevSibling
:
null
$$watchers
:
Array[2]
$$watchersCount
:
99
$id
:
1
$parent
:
null
$root
:
Scope
msg
:
Array[4]
notificationCount
:
0
notifications
:
Array[0]
online
:
true
__proto__
:
Object
Извинения за плохое форматирование! Но вы можете видеть msg, сидящий в $ rootScope!
Пожалуйста, покажите вывод 'console.log ($ rootScope)' ... – MarcoS
почему вы не можете использовать app.run часть вашего кода в ваш контроллер? –
Есть ли вероятность, что 'ipc.send' будет асинхронным? – devqon