2012-12-05 20 views
12

Semplice, spero ..angularjs - iniezione dipendenza runtime?

Ecco uno plunker per riferimento.

so come specificare una dipendenza a tempo di compilazione (vedi regolatore MainCtrlInjected). Ma come faccio a tirare giù una dipendenza in fase di esecuzione, dando il nome di tale dipendenza? (vedi MainCtrlInjectedRuntime controller)

risposta

16

È possibile utilizzare $ iniettore per ottenere il vostro valore in fase di esecuzione:

Controllare il mio plunker biforcuta: http://plnkr.co/edit/iVblEU?p=preview

Codice:

app.controller('MainCtrlInjectedRuntime', [ 
    '$scope', 
    '$injector' 
    ($scope, $injector) -> 

    nameValHandle = 'nameVal' 

    # !!! This is how you inject at runtime 
    name = $injector.get(nameValHandle) 

    $scope.name = name 
]) 
+0

Ehi, è stato facile, grazie! –

+1

Vedo che l'iniettore può essere utilizzato per iniettare oggetti noti, può l'iniettore aggiungere nuove dipendenze a un modulo? come in quando, dinamicamente precaricare un widget, posso aggiungerlo all'app, quindi l'app può mostrarlo? – Sander

0

Sto solo entrando in angularjs, ma credo che il modo appropriato per gestire questa situazione sarebbe quello di iniettare un servizio in MainCtrlInjectedRuntime. Il servizio iniettato avrebbe il tuo metodo somehowGetNameFromValue.

+0

Hai ragione per i nomi di dipendenza che sono noti al momento della compilazione tempo, ma a volte a runtime questo è utile. Quello che sto usando è, in una direttiva, sto impostando un attributo sul nome di una dipendenza "valore" che aiuta a configurare la direttiva. Nella mia direttiva risolvo la dipendenza in modo dinamico. –