Я пытаюсь инкапсулировать события в службе, чтобы внедрить механику для подписки/отмены подписки слушателей, когда область действия контроллера уничтожена. . Это потому, что я использую rootScope $ на следующий образом:Как инкапсулировать отдельные и временные события в службе?
if(!$rootScope.$$listeners['event']) {
$rootScope.$on('event', function(ev, data){
// do some...
});
}
или
$scope.$on('$destroy', function(ev, data){
// unsubscribe the listener
});
Так что я просто нужен один слушатель этого события, нужно удалить существующий слушатель, когда контроллер больше не жив, потому что функция, которую я зарегистрировал ранее, все еще запускается.
Так что мне нужно реализовать прослушиватель событий $ destroy на моем контроллере, чтобы уничтожить слушателя при уничтожении области, но я не хочу делать этот код каждый раз, когда я создаю событие. Вот почему я хочу создать сервис, где я собираюсь инкапсулировать события.
angular.module('core').factory('event', [
function() {
var service = {};
service.events = {};
service.on = function(scope, eventId, callback) {
scope.$on('$destroy', function(ev, other){
//unsubscribe
});
service.events[eventId] = callback;
// scope = null; I guess ?
};
service.emit = function(eventId, data){
if (service.events[eventId])
service.events[eventId](data);
else
return new Error('The event is not subscribed');
};
return service;
}
]);
Это может быть сделано с помощью $ rootScope вместо моих собственных методов, но инкапсулирования $ на $ и испускать из $ rootScope, но в конце концов я буду иметь один и тот же вопрос здесь.
Так вот мои вопросы:
- Это хорошая практика, чтобы передать значение реф область к службе?
- В чем смысл уничтожения $$? когда это верно, означает, что угловой JS не имеет внутренних ссылок на экземпляр?
- Должен ли я сделать scope = null в моей службе, чтобы GC удалял объект или выполнял angularJS с явным удалением?
- Есть ли лучший способ сделать то, что я хочу?
что с "!!!" ? – dandavis
@ dandavis Я использую === во всем проекте, поэтому я использую !! на литье фальшивых ценностей, здесь меня бросились и снова отрицали .. Я знаю .. просто! хорошо – rahpuser