亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

AngularJS中的模塊詳解

 更新時間:2015年01月29日 10:28:24   投稿:junjie  
這篇文章主要介紹了AngularJS中的模塊詳解,本文給出了一個模塊實例,需要的朋友可以參考下

在講angularjs的模塊之前,我們先介紹一下angular的一些知識點:

AngularJS是純客戶端技術(shù),完全用Javascript編寫的。它使用的是網(wǎng)頁開發(fā)的常規(guī)技術(shù)(HTML,CSS,Javascript),目的是讓網(wǎng)頁應(yīng)用開發(fā)更快更容易。

AngularJS簡化應(yīng)用開發(fā)的一個重要方法是,將一個些通用的低級開發(fā)操作包裝起來提供給開發(fā)者。AngularJS會自動處理好這些低級操作。它們包括:

1.DOM操作
2.設(shè)置事件的監(jiān)聽
3.輸入驗證,因為AngularJS會處理大部分這些操作,所以開發(fā)者就能更多的專注在應(yīng)用的業(yè)務(wù)邏輯上,更少地編寫那些重復(fù)性的、易錯的、低級的代碼。

在AngularJS簡化開發(fā)的同時,它也為客戶端帶來了一些精巧的技術(shù),它們包括:

1.數(shù)據(jù)、業(yè)務(wù)邏輯、視圖的分離
2.數(shù)據(jù)和視圖的自動綁定
3.通用服務(wù)
4.依賴注入(主要用于聚合服務(wù))
5.可擴展的HTML編譯器(完全由JavaScript編寫)
6.易于測試
7.客戶端對這些技術(shù)的需求其實已經(jīng)存在很久了。

同時,你還可以用AngularJS來開發(fā)單頁或者多頁的應(yīng)用,不過其主要還是用來開發(fā)單頁的。 AngularJS支持瀏覽器的歷史操作,向前,向后按鈕,單頁應(yīng)用中的收藏操作。

接下來,我們來詳細(xì)講解angularJS的模塊。

大部分應(yīng)用都有一個主方法用來實例化、組織、啟動應(yīng)用。AngularJS應(yīng)用沒有主方法,而是使用模塊來聲明應(yīng)用應(yīng)該如何啟動。這種方式有以下幾個優(yōu)點:

1.啟動過程是聲明式的,所以更容易懂。
2.在單元測試是不需要加載全部模塊的,因此這種方式有助于寫單元測試。
3.可以在特定情況的測試中增加額外的模塊,這些模塊能更改配置,能幫助進(jìn)行端對端的測試。
4.第三方代碼可以打包成可重用的模塊。
5.模塊可以以任何先后或者并行的順序加載(因為模塊的執(zhí)行本身是延遲的)。

舉個例子:

<!doctype html>
<html ng-app="myApp">
 <head>
  <script src="http://code.angularjs.org/angular-1.0.2.min.js"></script>
  <script>
      var myAppModule = angular.module('myApp', []);
      // configure the module.
      // in this example we will create a greeting filter
      myAppModule.filter('greet', function() {
         return function(name) {
            return 'Hello, ' + name + '!';
         };
      });
  </script>
 </head>
 <body>
  <div>
   {{ 'World' | greet }}
  </div>
 </body>
</html>

上面的例子,我們是通過在<html ng-app="myApp">中進(jìn)行指定,來實現(xiàn)使用myApp這個模塊啟動應(yīng)用的。

以上這個例子寫法很簡單,但是不適合用同樣的寫法來寫大型應(yīng)用。我們推薦是將你的應(yīng)用拆分成以下幾個模塊:

1.一個服務(wù)模塊,用來做服務(wù)的聲明。
2.一個指令模塊,用來做指令的聲明。
3.一個過濾器模塊,用來做過濾器聲明。
4.一個依賴以上模塊的應(yīng)用級模塊,它包含初始化代碼。

舉個例子:

<!doctype html>
<html ng-app="xmpl">
 <head>
  <script src="http://code.angularjs.org/angular-1.0.2.min.js"></script>
  <script src="script.js"></script>
 </head>
 <body>
  <div ng-controller="XmplController">
   {{ greeting }}!
  </div>
 </body>
</html>
[/code]

script.js:

[code]
angular.module('xmpl.service', []).   //服務(wù)模塊
 value('greeter', {    //自定義greeter對象
  salutation: 'Hello',
  localize: function(localization) {
    this.salutation = localization.salutation;
  },
  greet: function(name) {
    return this.salutation + ' ' + name + '!';
  }
 }).
 value('user', {   //自定義user對象
  load: function(name) {
    this.name = name;
  }
 });
angular.module('xmpl.directive', []);  //指令模塊
angular.module('xmpl.filter', []);   //過濾器模塊
angular.module('xmpl', ['xmpl.service', 'xmpl.directive', 'xmpl.filter']).  //模塊xmpl依賴于數(shù)組中的模塊
 run(function(greeter, user) {
  // 初始化代碼,應(yīng)用啟動時,會自動執(zhí)行
  greeter.localize({
    salutation: 'Bonjour'
  });
  user.load('World');
 })
// A Controller for your app
var XmplController = function($scope, greeter, user) {
   $scope.greeting = greeter.greet(user.name);
}

這樣拆分的原因是,在你的測試中常常需要忽略掉初始化代碼,因為這些代碼比較難測試。通過把它拆分出來就能在測試中方便地忽視掉它。通過只加載和當(dāng)前測試相關(guān)的模塊,也能使測試更專一。以上只是一個建議,你可以放心根據(jù)你的具體情況來調(diào)整。

一個模塊就是一系列配置和代碼塊的集合,它們是在啟動階段就附加到應(yīng)用上的。一個最簡單的模塊由兩類代碼塊集合組成的:

配置代碼塊 - 在注入提供者注入和配置階段執(zhí)行。只有注入提供者和常量可以被注入到配置塊中。這是為了防止服務(wù)在被配置好之前就被提前初始化。
運行代碼塊 - 在注入器被創(chuàng)建后執(zhí)行,被用來啟動應(yīng)用的。只有實例和常量能被注入到運行塊中。這是為了防止在運行后還出現(xiàn)對系統(tǒng)的配置。

代碼實現(xiàn):

angular.module('myModule', []).  
  config(function(injectables) { // provider-injector      配置代碼塊
    // This is an example of config block.
    // You can have as many of these as you want.
    // You can only inject Providers (not instances)
    // into the config blocks.
  }). run(function(injectables) { // instance-injector      運行代碼塊
    // This is an example of a run block.
    // You can have as many of these as you want.
    // You can only inject instances (not Providers)
    // into the run blocks
  });

模塊還有一些配置的簡便方法,使用它們的效果等同于使用代碼塊。舉個例子:

angular.module('myModule', []).
 value('a', 123).
 factory('a', function() { return 123; }).
 directive('directiveName', ...).
 filter('filterName', ...);
// is same as
angular.module('myModule', []).
 config(function($provide, $compileProvider, $filterProvider) {
  $provide.value('a', 123)
  $provide.factory('a', function() { return 123; })
  $compileProvider.directive('directiveName', ...).
  $filterProvider.register('filterName', ...);
 });

配置塊會按照$provide, $compileProvider, $filterProvider,注冊的順序,依次被應(yīng)用。唯一的例外是對常量的定義,它們應(yīng)該始終放在配置塊的開始處。

運行塊是AngularJS中最像主方法的東西。一個運行塊就是一段用來啟動應(yīng)用的代碼。它在所有服務(wù)都被配置和所有的注入器都被創(chuàng)建后執(zhí)行。運行塊通常包含了一些難以測試的代碼,所以它們應(yīng)該寫在單獨的模塊里,這樣在單元測試時就可以忽略它們了。

模塊可以把其他模塊列為它的依賴?!耙蕾嚹硞€模塊”意味著需要把這個被依賴的模塊在本塊模塊之前被加載。換句話說被依賴模塊的配置塊會在本模塊配置塊前被執(zhí)行。運行塊也是一樣。任何一個模塊都只能被加載一次,即使它被多個模塊依賴。

模塊是一種用來管理$injector配置的方法,和腳本的加載沒有關(guān)系?,F(xiàn)在網(wǎng)上已有很多控制模塊加載的庫,它們可以和AngularJS配合使用。因為在加載期間模塊不做任何事情,所以它們可以以任意順序或者并行方式加載

相關(guān)文章

最新評論