2015-08-13 20 views
5

Sto cercando di iniettare un filtro nella mia controller e usarlo come tale:

angular 
    .module('graduateCalculator', []) 
     .filter('slug', function() { 
       return function(input) { 
        if(input) { 
         return input.toLowerCase().replace(/[^a-z-]/g, '-'); 
        } 
       }; 
     }).controller('GraduateCalculatorController', ['$filter', app.graduateCalculator($filter)]); 

Tuttavia, ottengo l'errore di cui sopra. Ovviamente sto facendo qualcosa di molto sbagliato - semplicemente non abbastanza ovvio per me.

Uncaught ReferenceError: $filter is not defined 

Potrebbe avere qualcosa a che fare con la mia funzione. È scritto così:

var app = { 

    graduateCalculator: function($filter) { 
     window.console.log($filter('slug')('A random looking string...')); 
    } 

}; 

Aiuto apprezzato!

risposta

14

Il secondo parametro da [module].controller è una funzione di costruzione, non chiamare la funzione di costruzione ...

// change this... 
.controller('GraduateCalculatorController', ['$filter', app.graduateCalculator($filter)]); 
// to this... 
.controller('GraduateCalculatorController', ['$filter', app.graduateCalculator]); 
1

si dovrebbe avvolgere il contorller con una funzione

angular.module('graduateCalculator', []) 
    .filter('slug', function() { 
      return function(input) { 
       if(input) { 
        return input.toLowerCase().replace(/[^a-z-]/g, '-'); 
       } 
      }; 
    }) 
    .controller('GraduateCalculatorController', ['$filter', function($filter) { 
     app.graduateCalculator($filter) 
    }]); 
+0

Sembra rimuovere l'errore ... ma la mia app non funziona più. –

+0

beh, non è esattamente chiaro cosa dovrebbe accadere – MoLow

+1

Vero vero. Sarebbe distratto dalla domanda iniziale per me di aver approfondito i dettagli sul perché non funzionava. Ma apprezzo il tuo suggerimento. Mi ha portato alla risposta che questo parametro dovrebbe essere una funzione di costruzione, non una chiamata di funzione. –

3

penso che accada di errore quando si prova a definire un controller e inserisci $filter nel tuo app.graduateCalculator($filter).

Con questo modo si richiama la funzione app.graduateCalculator($filter). Ma l'interprete js non sapeva cosa sia $filter, quindi ha gettato l'eccezione.

Basta aggiornare il controller in questo,

.controller('GraduateCalculatorController', ['$filter', app.graduateCalculator]); 

E assicurarsi che il proprio graduateCalculator hanno il parametro $filter.

6

La funzione del controller (per cui al momento è presente una chiamata di funzione, anziché una funzione di callback) deve essere una funzione che richiede $ scope (i controller richiedono $ scope), contenente anche $ filter.

controller('GraduateCalculatorController', ['$scope', '$filter', function($scope, $filter){<your code here>}]); 

Esistono, tuttavia, due modi per utilizzare il filtro. È possibile iniettare filtro $ e chiamare

$filter('slug')(inputStuff) 

o si può iniettare slugFilter e basta chiamare direttamente

slugFilter(inputStuff) 

Una delle lamentele più comuni circa angolare è i messaggi di errore, e questo sembra essere il problema qui!

Se non ero abbastanza chiaro su qualcosa fammelo sapere e farò del mio meglio per aiutare.