2014-09-03 8 views
6

Sto utilizzando il segmento del percorso angolare nella mia app angolare e un tentativo di configurare i segmenti da un feed JSON.

Ho problemi con questo, perché non riesco a capire come iniettare $http nella funzione app.config. Questo viene a mancare con Unknown provider: $http

myApp.config(["$http", "$routeSegmentProvider", function ($http, $routeSegmentProvider) { 
    /* setup navigation here calling $routeSegmentProvider.when a number of times */ 
} 

Così, invece di iniettare $ http in config, ho anche provato l'iniezione $routeSegmentProvider in myApp.run

myApp.run(["$http", "$routeSegment", function($http, $routeSegment) { 
    /* can use $http here to get data, but $routeSegment is not the same here */ 
    /* $routeSegment does not have the when setup method */ 
}]); 

Ho anche provato

myApp.run(["$http", "$routeSegmentProvider", function($http, $routeSegmentProvider) 

ma ottengo Unknown provider: $routeSegmentProviderProvider <- $routeSegmentProvider

+0

È possibile trovare la risposta qui: http://stackoverflow.com/questions/15937267/inject-service-in-app-config –

+0

@DavidBohunek Penso di aver trovato questo esempio prima, ma non ero in grado di farlo funzionare per qualche motivo. Ho deciso di andare con la risposta cliff.meyers per ora. – gwin003

risposta

11

Provi i ders possono essere iniettati solo nella fase "config" e non nella fase "run". Viceversa, un servizio come $ http non è stato ancora inizializzato nella fase "config" e sarà disponibile solo nella fase "run".

Un piccolo trucco per ovviare a questo è quello di definire una variabile nel campo di applicazione funzione di genitore in modo che sia il "config" e blocchi "run" possono avere accesso ad esso:

var routeSegmentProvider = null; 

myApp.config(["$routeSegmentProvider", function ($routeSegmentProvider) { 
    routeSegmentProvider = $routeSegmentProvider; 
}]); 

myApp.run(["$http", function($http) { 
    // access $http and routeSegmentProvider here 
}]); 

io non sono certo se incontrerai problemi nel tentativo di chiamare $ routeSegmentProvider.setup() nella fase di esecuzione come non ho provato. In passato ero in grado di utilizzare la stessa tecnica per registrare gli interceptor di risposta http che dipendono da alcuni servizi personalizzati con $ httpProvider.

+2

Funziona, anche se questa potrebbe non essere la * migliore * soluzione ... Ho deciso di andare con questo per ora. Grazie! – gwin003

+0

Sembra una manomissione usare le variabili globali. La maggior parte di voi lascerà questo slittamento perché è JS front-end. –

+1

Questo codice era originariamente avvolto in un IIFE ma l'avevo omesso per brevità. Niente su di esso richiede l'uso di portata globale, è solo accessibile tramite chiusura. –

Problemi correlati