2014-01-27 4 views
5

Ich schreibe ein Angular-Plugin, das ein eckiges App-Modul initialisiert, wenn es keine gefunden hat, aber wenn es eine bereits laufende oder deklarierte ng-App gibt, wird meine App stattdessen dieses Modul verwenden. Im Idealfall würde mein Code wie folgt aussehen:Kann überprüft werden, ob eine Angular App bereits über laufende App-Module verfügt?

// return array of apps, whether from ng-app or manually bootstrap 
runningAppModules = angular.getNgApps(); 

if(!isEmpty(runningAppModules)) 
{ 
    var app = runningAppModules[0]; 
    // Do something with the already initialized app like register controllers 
    // Or add directives 
} 
else 
{ 
    // manually bootstrap apps 
} 

Antwort

7
try { 
    angular.module('module-name-here'); 
    } 
    catch(e) { 
    //not loaded 
    } 

Die module() Funktion einen Fehler aus, wenn Sie es für ein Modul aufrufen, die nicht existiert, es sei denn natürlich sind Sie eins mit angular.module('some-name', []); zu schaffen. Sie können es also einfach in einen try/catch Block schreiben, um zu prüfen, ob ein Modul geladen ist oder nicht.

Live demo (click).

var appElems = document.querySelectorAll('[ng-app]'); 

for (var i=0; i<appElems.length; ++i) { 
    var appName = appElems[i].getAttribute('ng-app'); 
    try { 
    angular.module(appName); 
    } 
    catch(e) { 
    console.log('Module "'+appName+'" not loaded!'); 
    //create the app 
    angular.module(appName, []); 
    } 
} 
+0

Das Problem ist, dass ich weiß nicht, was die Modulnamen vor der Zeit sein wird, da der Benutzer, wie etwas tun: . Mein Plugin lädt angularjs, wenn es nicht vorhanden ist, oder lädt manuell eine App, wenn keine benutzerdefinierten Apps vorhanden sind. Mein Plugin ist für Angular/Non-AngularJs Benutzer gleichermaßen geeignet. –

+1

@ Mr.Student ist etwas falsch mit der Suche in der Dom: 'document.querySelectorAll ('[ng-app]')' und mit diesen Werten in der Try/Catch? – m59

+0

Überhaupt nicht. Ich wusste nichts über die Option querySelectorAll(). Sie sollten das in Ihre Antwort aufnehmen. Vielen Dank. –

Verwandte Themen