2013-07-16 3 views
25

Я пытаюсь создать собственный фильтр для отслеживания событий. Таким образом, фильтр может вызывать методы в службе segmentio.Как внедрить сервис как зависимость для настраиваемого фильтра в angular.js?

angular.module('sageApp') 
    .filter('trackEvent', function(segmentio) { 
    return function(entry, category) { 
    segmentio.track(entry, category); 
    } 
}); 

Но услуга сегментации недоступна. Любые идеи относительно того, как зависимость вводит услугу в фильтр, будут высоко оценены.

+1

FYI, приведенный выше код работает. –

ответ

41

Try:

app.filter('sageApp', ['segmentio', function(segmentio) { 
    return function(entry, category) { 
     segmentio.track(entry, category); 
    } 
}]); 
+2

Как вы теперь напишете тест для _sageApp_, который вводит mock _segmentio_ – shantanusinghal

+0

Просто проверьте, вызван ли соответствующий метод при добавлении сегментации. –

+1

@SatheeshKumar Как вы издеваетесь над зависимостями фильтра? Кажется, что я не могу передать mocks при создании экземпляра фильтра ('$ filter ('name')' не принимает другие аргументы). – JimmyBoh

3

Сервис тестируется и работает. По общему признанию, я выяснил свою проблему: при использовании угловых, иногда хром-dev-инструментов не отображаются переменные в закрытии, когда вы устанавливаете отладчик для проверки. Когда я сделал console.log (segmentio), он работал нормально.

+0

Случается ко мне все время. Вы не можете видеть ничего, что не используется в области функций, даже если вы интуитивно предположили, что вы можете проверить переменную вне функции, в этом случае внутри 'return function (...'. Но как только вы напишите код dumy, например 'var temp = segmentio', вам нужно что-то проверить. –

Смежные вопросы