2014-11-18 19 views
17

Ragazzi, sapete se è possibile aggiungere una dipendenza modulo dopo che è stata creata? Qualcosa del genere:Aggiungi dipendenza al modulo Angolare dopo che è stato creato

// init module in file A 
angular.module("myApp", []); 

// retrieve module in file B and add new dependencies: 
mod = angular.module("myApp"); 
// now I want to add an 'ngResource' dependency to mod 
// ??? 

EDIT: Capisco che questa possa sembrare una domanda strana. Sto lavorando a un'organizzazione di app basata su componenti e voglio anche vedere se un sottocomponente può aggiungere dipendenze al modulo componente padre senza definire il proprio modulo. Qualcosa del genere:

app/ 
components/ 
    |__componentA/ 
     |__app.js // initializes component A module 
     |__subcomponentA/ 
       |__app.js // want to add subcomponentA dependencies to componentA module from here 

La mia alternativa è semplicemente dichiarare tutti i subcomponentA dipendenze direttamente sul modulo Componenta, ma dal punto di vista dell'organizzazione, preferisco tenere queste dipendenze all'interno della directory subcomponentA, quindi se in seguito si decide per rimuovere il sottocomponenteA dall'app, non è necessario ricordare di rimuovere le sue dipendenze dal modulo componentA. Voglio che tutto ciò che riguarda il sottocomponente A sia raggruppato all'interno della directory subcomponentA. Il mio script di compilazione garantirà che il codice componenteA venga elaborato prima che il sottocomponente A sia, comunque.

Grazie a tutti quelli che si fanno una pugnalata.

risposta

0

Non credo sia possibile. Tuttavia, mi piacerebbe essere smentito.

Dalla mia esperienza (e in base alle dipendenze del modulo Angular documentation) è possibile dichiarare solo quando si inizializza un modulo. Vale la pena notare che finché l'applicazione non viene riavviata, le dipendenze non sono completamente impostate. Non è possibile aggiungere dipendenze a un'applicazione in esecuzione, per quanto ne so, a meno che non ci sia un modo per riavviare l'intera app, che potrebbe avere comunque effetti collaterali indesiderati.

Modifica: In realtà ... Non l'ho mai provato, ma in realtà potrebbe essere molto più semplice di quanto pensassi in origine. Potremmo provare quanto segue:

File A:

window.myApp_dependencies = []; // Add dependencies to the global scope. 

angular.module('myApp', dependencies); 

File B:

var mod = angular.module("myApp"); 

window.myApp_dependencies.push('ngRoute'); 

Questo non è proprio l'ideale, come si è costretti a creare una variabile sulla portata globale. Sarebbe possibile farlo con i moduli, però. Nota che in questo caso, le dipendenze sarebbero mutabili solo fino all'avvio effettivo dell'app, quindi potresti dividere le dipendenze tra i file, ma non sarebbe possibile modificarli in fase di runtime.

Non so se questo funziona. Lo farò domani, però.

+2

Quindi, ha funzionato? –

+0

Funziona, l'ho appena provato con Angular 1.5.0 – Stan

-2

domanda Strano ma ancora ciò che si cerca di raggiungere qualcosa di sbagliato in prospettiva di angularjs/SPA/iniezione di dipendenza

vostro caso d'uso è qualcosa di simile che si vuole utilizzare questa dipendenza in un particolare modulo o in una pagina. Ecco perché vuoi iniettarlo in una posizione, non nell'altra.

Ma, facendo questo renderebbe due ambiti diversi per la vostra applicazione becuase utilizzando lo stesso nome del modulo se si reinitiallized quel modulo che sarebbe diverso che l'altro che è già dichiarata

dire: scheda A

angular.module("myApp", []); 

questo è definito e in file di B

mod = angular.module("myApp", ['ngResource']); 

quindi questo potrebbe causare di avere due app diverse con lo stesso nome in un ap plication e che due app con lo stesso nome in diversi file quindi è qualcosa come avere due diversi moduli angolari all'interno dell'applicazione.

Seconda opzione: lasciare che lo stesso modulo nell'applicazione e iniettare in un punto e in qualsiasi controller che si desidera utilizzare questo lo inietti come argomento in quel controller.

Spero che questo aiuto!

24

Io uso il seguente metodo per questo e funziona bene per me.

var app = angular.module("myApp", []); 

angular.module("myApp").requires.push('ngResource'); 
+0

Testato e funziona https://jsfiddle.net/cattails27/6mcck6pp/. Con mia sorpresa, se questo esiste questo elimina la necessità di smistamento disordinato di moduli angolari ... – jkris

+0

Quale versione di angolare stavi usando? –

+0

@SQLandJavaLearner Nel jsfiddle usa Angular Version 1.4.8 – Necroqubus

Problemi correlati