2015-11-18 4 views
1

Мне просто интересно, есть ли способ определить условный прослушиватель событий, то есть есть способ прослушать событие только в случае выполнения некоторого условия.Conditional EventListener

Я думаю, что я прошу неортодоксальный материал, или существует уже существующий путь, который я не замечаю.

Пример:

'lastRepeat' Пусть быть событием, излучаемые директивами, когда нг-повтор заканчивается.

app.controller('ctrl',function($scope){ 
    $scope.$on('lastRepeat', callback); // Here the callback will be called every time lastRepeat event is emitted by the directive 
}); 

Но то, что я ищу что-то вроде этого (Это то, что я думал, решение не обязательно использовать тот же подход):

app.controller('ctrl',function($scope){ 
    function foo(){ 
    if(bool) 
     $scope.$on('lastRepeat', callback); // Problem listening like this is that a listener is created everytime foo is called and condition is met and hence we end up having multiple listeners 
    } 
)}; 

В основном я хочу, чтобы избежать этого многократного создания слушатели. Есть ли способ сохранить этот слушатель как переменную и слушать, только если выполнено какое-либо условие.

+0

Не уверен, что я понимаю, что вы ищете. Является ли добавление слушателя, что вы хотите быть условным, или фактическое реагирование на событие? – tasseKATT

+0

Фактическое реагирование события на состояние –

ответ

2

Как насчет:

app.controller('ctrl', function($scope) { 

    var condition = false; 
    var callback = function() {}; 

    $scope.$on('lastRepeat', function() { 
    if (!condition) return; 
    callback();  
    }); 
}); 
+0

В настоящее время я использую точный обходной путь, но в моем случае у меня есть несколько условий, и мне нужно делать разные вещи по каждому условию, для которого я просто расширил вышеупомянутый ответ. Но одной из проблем было бы бухгалтерирование того, какое состояние происходит, и может привести к проблеме, поскольку шкала кода. Вот почему я хочу прослушивать область функций, а не слушать в области контроллера. –

+0

Не думайте, что вы можете слушать в области функций так, как хотите, если я не ошибаюсь. Но вы можете создать службу, которая управляет парами условий и действий. – tasseKATT

+0

Исправьте меня, если я ошибаюсь. Что вы предлагаете, это прослушивать внутри служебной функции вместо контроллера, а затем вызывать эту служебную функцию внутри функции контроллера. –