2014-01-27 112 views
5

我正在寫一個Angular插件,它將初始化角度應用程序模塊,如果沒有找到,但是如果有已經運行或聲明的ng-app,我的應用程序將使用該模塊。理想的情況是我的代碼看起來像下面這樣:如果你調用它不存在,當然,除非你正在創建一個與angular.module('some-name', []);模塊是否有可能檢查一個Angular應用程序是否已經運行應用程序模塊?

// 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 
} 

回答

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

module()功能將拋出一個錯誤。因此,您可以將其包裝在try/catch區塊中以檢查是否加載了模塊。

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

的問題是,我不知道該模塊的名稱將是什麼時間提前,因爲用戶可以這樣做:<體NG-應用=「some_weird_name」>。如果沒有用戶定義的應用程序,我的插件將加載angularjs,如果它不存在或手動引導應用程序。我的插件旨在被角度/非angularjs用戶使用。 –

+1

@ Mr.Student在搜索dom時出現了什麼問題:'document.querySelectorAll('[ng-app]')'並在try/catch中使用這些值? – m59

+0

沒有。我不知道querySelectorAll()選項。你應該在你的答案中包括這個。謝謝。 –

相關問題