2014-04-08 11 views
11

Nel codice sorgente AngularJS, v'è una sezione come questo, il commento viene aggiunto da meperché il core angularjs deve rilevare se il modulo ngLocale è stato creato?

try { 
    angularModule('ngLocale'); //this detect wether ngLocale has been created 
} catch (e) { 
    //if not created , then create it here 
    angularModule('ngLocale', []).provider('$locale', $LocaleProvider);  
} 

Capisco come ngLocale funziona, perché è possibile ignorare predefinita ngLocale s' $locale servizio utilizzando i file come

<script src="../src/ngLocale/angular-locale_fr-ca.js"></script> 

Ma questo dopo il core AngularJS è stato eseguito. Perché l'eccezione genera sempre, letteralmente, perché non rimuovere semplicemente il codice di rilevamento e semplicemente utilizzarlo?

angularModule('ngLocale', []).provider('$locale', $LocaleProvider); 
+1

È certamente irritante che questa eccezione venga generata ogni volta che viene caricata la pagina. – crimbo

+0

usa firefox per eseguire il debug di questo - questo è un errore con angular + chrome-- http://www.congral.com/2014/05/29/have-you-already-encountered-the-uncaught-object-exception/ –

risposta

1

La ragione di questo è perché angularjs manca la capacità di verificare la disponibilità di un modulo su un modo grazioso. Quindi, invece di un checkModule() o findModule(), il framework deve indurre un "modulo che carica l'eccezione" per il modulo inesistente.

Assicurarsi che il modulo possa accettare un parametro per comunicare al sistema se è corretto non trovare un modulo e restituire semplicemente null come risultato.

In realtà, lasciare che il nome del modulo inizi con un punto interrogativo nel percorso di codice var mod = angular.module ("? ModuleName") (e non quando si definisce un modulo) lo renderebbe un semplice codice oneliner per l'omissione delle eccezioni .

+0

buon suggerimento –

+0

per favore aggiungi uno snippet – praveenpds

Problemi correlati