2014-04-08 12 views
11

W kodzie źródłowym angularjs, istnieje sekcja tak, komentarz zostanie dodany przeze mniedlaczego rdzenia angularjs trzeba wykryć, czy moduł ngLocale został utworzony?

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

Rozumiem, jak ngLocale prace, ponieważ można zastąpić domyślny ngLocale „s $locale usługę przy użyciu plików jak

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

Ale to po uruchomieniu rdzenia AngularJS. Ponieważ wyjątek zawsze rzuca, dosłownie, dlaczego nie wystarczy usunąć kod wykrywania i po prostu go użyć?

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

To jest zirytowane, że ten wyjątek jest generowany za każdym razem, gdy strona jest ładowana. – crimbo

+0

użycie Firefox do debugowania to - to jest błąd z kątowy + chrome-- http://www.congral.com/2014/05/29/have-you-already-encountered-the-uncaught-object-exception/ –

Odpowiedz

1

Powodem tego jest to, że angularjs nie ma możliwości sprawdzenia dostępności modułu w pełen wdzięku sposób. Zatem zamiast modułu checkModule() lub findModule(), struktura musi wywołać "wyjątek ładowania modułów" dla nieistniejącego modułu.

zapewnić moduł mógł zaakceptować parametr aby poinformować system, jeśli jest OK, aby nie znaleźć moduł, a po prostu zwróci null wyniku.

Faktycznie, pozwolenie, aby nazwa modułu zaczynała się od znaku zapytania w ścieżce kodu var mod = angular.module ("? ModuleName") (a nie podczas definiowania modułu) spowodowałoby, że byłby prostym kodem oneliner, który pomijałby wyjątki .

+0

dobra sugestia –

+0

proszę dodać jeden fragment – praveenpds

Powiązane problemy