В моем приложении у меня есть статические вспомогательные «классы», которые выполняют для меня большую логику, в этом конкретном случае этот класс является классом обмена сообщениями и выполняет логику, требующую доступа к трем различным службам (фабрикам).Можно ли вернуть `this` с завода AngularJS?
Единственная фабрика, которая должна ссылаться на этот класс, является фабрикой сетей, так как при получении определенного пакета мне нужно заставить обмен сообщениями обновлять базы данных с сервера.
Вот пример того, что я пытаюсь сделать:
angular.module('database', []).factory('$database', function() {
// SQLite implementation
return {
// ...
};
});
angular.module('networking', []).factory('$networking', ['$database', function($database) {
// Websocket implementation
if(packet.opcode == 8) {
Messaging.update(this, $database);
}
return {
// ...
};
}]);
Messaging = {
// Messaging implementation..
update: function(networking, database) {
if(networking === undefined) { ]
console.log("Networking is undefined.");
return;
}
if(database === undefined) {
console.log("Database is undefined.");
return;
}
// Messaging update implementation.
};
К сожалению, Networking is undefined.
сообщение представляется при попытке вызова Messaging.update(this, $database)
, как показано выше.
ПРИМЕЧАНИЕ: Я не могу просто внедрить сетевую реализацию $ в область $ scope и использовать ее, потому что это обрабатывается на «обратной стороне». Эта логика должна выполняться полностью независимо от области действия. Этот код должен выполняться всякий раз, когда сервер (реализация Websocket) отправляет клиенту пакетный код операции 8, независимо от области действия. Это выполнение выполняется полностью в фоновом режиме, и пользователь даже не знает, что это происходит.
Я также использую Messaging.update
в других местах (от объема), где это применимо, например, в MessagingController
, когда пользователь посылает сообщение, я могу вызвать Message.update
с помощью впрыскиваемого $networking
службы. К сожалению, инъекция здесь не вариант.
Примечание: Создание сообщений как реализация услуг приведет к созданию цикла зависимостей, поскольку у меня есть три службы в настоящее время file-cache, database, networking
и реализация обмена сообщениями требует функциональности от всех трех. Для получения информации о пользователе, недоступном в локальной базе данных SQLite при получении сообщения, требуется сеть. Файловый кеш используется для кэширования образа аватара пользователя, когда создается новый поток, и, конечно, база данных необходима для хранения сообщений.
Прошу прощения, потребовалось так много времени, пришлось менять вокруг большого количества кода, чтобы заставить этот шаблон работать. Благодаря! – Hobbyist