2016-08-03 44 views
0

我需要使用RequireJS注入我的angularJs腳本文件,它工作正常。但是我不能在單個文件中寫入多個iife。在這種情況下,只有一個iife會被執行。以下是我的代碼。多個IIFE在角js腳本和注入使用RequireJS

(function() { 
define([ 
    'angular' 
], function() { 
    angular.module('framework', ['ui.router', 'pluggableViews']) 
     .controller('appCtrl', function ($scope) { 
      $scope.label = 'Test label'; 
     }); 
}); 
})(); 

(function() { 

define([ 
'angular' 
], function() { 

    angular.module('framework').config(['$urlRouterProvider', 
     '$pluggableViewsProvider', 
     function ($urlRouterProvider, $pluggableViewsProvider) { 

      $urlRouterProvider.otherwise('/login'); 
     }]); 

}); 
})(); 

在上面的代碼中只執行第一個iife。第二生命沒有得到任何突破點。如何在使用requireJS時解決此問題?如果我將這兩個文件移動到兩個單獨的文件中,那麼它將起作用。但在任何情況下都不可能。請給我一個解決方案。

回答

1

您在同一個文件中有多個匿名define調用。這是RequireJS無法處理的。當RequireJS運行到匿名define時,它使用用於加載文件的模塊名稱作爲要分配給匿名定義模塊的模塊名稱。這就是模塊如何獲得它的名字。如果你在同一個文件中有多個匿名define,那麼RequireJS應該做什麼?兩個模塊不能具有相同的名稱,並且它不會爲您創造名稱。當一個模塊出現在單個文件中時,必須通過將名稱作爲第一個參數傳遞給define來明確命名它們。 (這是優化器(r.js)爲你做。)

(理論旁白:兩個不同的RequireJS 方面可以各自具有相同名稱的模塊,但這個不能在這裏是一個因素,因爲兩個模塊從負載相同的文件將在相同的上下文中。)

如果要保留匿名define調用,請將兩個模塊保留在單獨的文件中。或者,如果您絕對必須將這些模塊放在單個文件中,請命名模塊。我會讓他們分開進行開發,讓捆綁者在製作捆綁部署時給他們名字。

+0

非常感謝。該問題得到解決。我根據您的建議修改了我的代碼。我爲我的第二個iife定義添加了一個名稱,如'define('modules/test2',['angular'],function(angular){'並修改了我的require配置部分。 –