2013-07-16 14 views
25

Sto provando a creare un filtro personalizzato per tenere traccia degli eventi. Quindi il filtro può chiamare metodi sul servizio segmentio.Come iniettare un servizio come dipendenza per un filtro personalizzato in angular.js?

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

Ma il servizio di segmentio non è disponibile. Tutte le idee su come dipendere da un servizio ad un filtro sono molto apprezzate.

+1

FYI, il codice sopra funziona. –

risposta

41

Prova:

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

Come scriverà ora un test per _sageApp_ che inietta un simulato _segmentio_ – shantanusinghal

+0

Basta controllare se viene chiamato il metodo appropriato sul servizio segmentio mock che si inietta. –

+1

@SatheeshKumar Come si prendono in giro le dipendenze del filtro? Non riesco a passare in mock quando instanzia un filtro ('$ filter ('name')' non accetta altri argomenti). – JimmyBoh

3

Il servizio è testato e funziona. Ho scoperto in modo acuto il mio problema, quando uso angolare, a volte gli strumenti di chrome dev non visualizzano le variabili nella chiusura quando si inserisce un debugger per ispezionarlo. Quando ho fatto console.log (segmentio) ha funzionato bene.

+0

Mi succede tutto il tempo. Non puoi vedere nulla che non sia usato nell'ambito di una funzione, anche se dovresti assumere intuitivamente che puoi controllare una variabile al di fuori della funzione, in questo caso, all'interno della funzione di ritorno (... '. Ma una volta che scrivi codice dummy come 'var temp = segmentio', avrai qualcosa da ispezionare. –

Problemi correlati