【angularJS】定義模塊angular.module


模塊定義了一個應用程序。控制器通常屬於一個模塊。

JavaScript 中應避免使用全局函數。因為他們很容易被其他腳本文件覆蓋。

AngularJS 模塊讓所有函數的作用域在該模塊下,避免了該問題。

 簡單的定義一個Angular模塊(module)

var app = angular.module("myApp", []);  

這種方法帶有兩個參數,一個是模板名,一個是依賴注入列表【該模塊所依賴的模塊】,數組為空,表示當前注冊的模板不需要依賴關系

如果依賴不為空,則要保證其依賴的模塊已經加載。這里面就有個加載順序的問題。

最簡單的情況下,我把使用模塊所在的JS文件全部按順序列在HTML的script元素中,只要保證模塊之間的依賴關系正確即可,如:
<script src="/scripts/myApp.js"></script>

 <script src="/scripts/app.js"></script>

如果app.js中的模塊依賴模塊myApp,則需先將定義它的myApp.js加載進來。在項目實踐中,這種方法顯然是不實際的,你不能在一開始把所有的JS文件全部加載進來。

通常會使用一些延遲/異步加載機制,如使用RequireJS

使用RequireJS定義的Angular模塊可以是這樣:

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

    angular.module('myApp', [])

      .controller('MyController', ['$scope', function ($scope) {

        //define scope data

      }]);

});

其中define函數加載了angular.js,並取得angular模塊,然后定義了myApp模塊。

如果myApp模塊(或者MyController)依賴於其他模塊(或組件),則需要告訴RequireJS在需要的時候加載:

define(['angular', './scripts/anotherApp', './scripts/service/utility' ], function(angular) {    //上面加載了3個js文件

        angular.module('myApp', ['newApp'])                                                                    //定義的myAPP模塊需要依賴newApp模塊(此模塊所在的js文件需要引進來)

           .controller('MyController', ['$scope', 'utils', function ($scope, utils) {                  //'MyController'依賴的一些組件scope等

           //define scope data

        }]);

});

這里,myApp依賴定義於anotherApp.js的newApp模塊,並且需要定義於utility.js的工廠服務utils。這里存在的一個陷阱是,依賴的兩個JS文件不一定會按照代碼中聲明的順序加載,即utility.js可能先於anotherApp.js加載。因此在使用requireJS加載依賴時,要注意這些依賴本身之間的相互關系,不能指望requires按某種順序加載這些依賴。否則,會導致一些概率性出現的問題,不易調試。

另外一點,如果在首次定義模塊A時使用了空數組作為依賴,然后在某次使用A模塊的過程中,誤將依賴數組又傳遞一次,那么A模塊原來的定義就會被覆蓋,並且原來A模塊定義的controller,service等組件也將不存在,這樣也會導致難以調試的問題。因此在定義和使用Angular模塊時不能大意。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM