2015-01-19 7 views
7

Ho bisogno di accedere a dati risolti da un servizio o da una direttiva per eseguire alcune operazioni generali sull'intera applicazione.Esiste un modo per accedere alle dipendenze dello stato risolto oltre a iniettarle nel controller?

L'unico modo per ottenere l'accesso ai dati risolti è iniettarlo nel controller.

Questa è la configurazione dei dati di test I:

resolve: { 
    test: function() { 
     console.log("resolving"); 
     return 5+2; 
    } 
} 

Ho provato questo nel mio controller solo per vedere cosa succede, ma non funziona:

$injector.invoke(function(test) { 
    console.log("injected", test); 
    $scope.test = test; 
}); 

ottengo:

"Error: [$injector:unpr] Unknown provider: testProvider <- test 

Quindi sembra che i dati risolti siano passati come locals alla funzione invoke sul controller di stato.

Ho anche scoperto che posso accedere all'oggetto volontà da parte dello Stato:

$state.current.resolve 

Ma questo è l'oggetto determinazione grezzo senza i dati risolti. Potrei invocare quelle funzioni per risolvere i dati, ma risolverei di nuovo le dipendenze. Se ci fossero richieste sull'oggetto risoluzione, verrebbero chiamate due volte.

Ho solo bisogno di accedere ai valori risolti proprio come vorrei accedere agli attributi dei dati o $ state.params.

risposta

12

Ho finalmente capito.

E 'possibile accedere a tutti i dati risolte attraverso il $ state $ oggetto corrente:.

$state.$current.locals.globals 
+1

Gotta love la denominazione di 'locals.globals'. Questo è quello che sono arrivato anche io ... sarebbe bello avere qualcuno del team angular-ui-router che risponda se questo è il modo corretto per ottenere i valori. –

+1

Dato che non stiamo usando alcuna variabile con prefisso $, che significa "totalmente privato e non si deve fare affidamento su questo per la compatibilità", suppongo che sia ok accedervi in ​​questo modo. Forse c'è un modo più pulito o più elegante per farlo. Ma penso che sia sicuro pensarlo ok. – Jens

+0

@jens Hai trovato un modo più pulito per gestire questo? Nessuna menzione di questo nella documentazione ufficiale di ui-router. – Marc

Problemi correlati