最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

AngularJS Module方法詳解

 更新時(shí)間:2015年12月08日 09:27:54   投稿:mrr  
AngularJS中的Module類負(fù)責(zé)定義應(yīng)用如何啟動,它還可以通過聲明的方式定義應(yīng)用中的各個(gè)片段。我們來看看它是如何實(shí)現(xiàn)這些功能的

AngularJS是什么?

AngularJs(后面就簡稱ng了)是一個(gè)用于設(shè)計(jì)動態(tài)web應(yīng)用的結(jié)構(gòu)框架。首先,它是一個(gè)框架,不是類庫,是像EXT一樣提供一整套方案用于設(shè)計(jì)web應(yīng)用。它不僅僅是一個(gè)javascript框架,因?yàn)樗暮诵钠鋵?shí)是對HTML標(biāo)簽的增強(qiáng)。

何為HTML標(biāo)簽增強(qiáng)?其實(shí)就是使你能夠用標(biāo)簽完成一部分頁面邏輯,具體方式就是通過自定義標(biāo)簽、自定義屬性等,這些HTML原生沒有的標(biāo)簽/屬性在ng中有一個(gè)名字:指令(directive)。后面會詳細(xì)介紹。那么,什么又是動態(tài)web應(yīng)用呢?與傳統(tǒng)web系統(tǒng)相區(qū)別,web應(yīng)用能為用戶提供豐富的操作,能夠隨用戶操作不斷更新視圖而不進(jìn)行url跳轉(zhuǎn)。ng官方也聲明它更適用于開發(fā)CRUD應(yīng)用,即數(shù)據(jù)操作比較多的應(yīng)用,而非是游戲或圖像處理類應(yīng)用。

為了實(shí)現(xiàn)這些,ng引入了一些非常棒的特性,包括模板機(jī)制、數(shù)據(jù)綁定、模塊、指令、依賴注入、路由。通過數(shù)據(jù)與模板的綁定,能夠讓我們擺脫繁瑣的DOM操作,而將注意力集中在業(yè)務(wù)邏輯上。

  另外一個(gè)疑問,ng是MVC框架嗎?還是MVVM框架?官網(wǎng)有提到ng的設(shè)計(jì)采用了MVC的基本思想,而又不完全是MVC,因?yàn)樵跁鴮懘a時(shí)我們確實(shí)是在用ng-controller這個(gè)指令(起碼從名字上看,是MVC吧),但這個(gè)controller處理的業(yè)務(wù)基本上都是與view進(jìn)行交互,這么看來又很接近MVVM。讓我們把目光移到官網(wǎng)那個(gè)非醒目的title上:“AngularJS — Superheroic JavaScript MVW Framework”。

AngularJS中的Module類負(fù)責(zé)定義應(yīng)用如何啟動,它還可以通過聲明的方式定義應(yīng)用中的各個(gè)片段。我們來看看它是如何實(shí)現(xiàn)這些功能的。

一.Main方法在哪里

        如果你是從Java或者Python編程語言轉(zhuǎn)過來的,那么你可能很想知道AngularJS里面的main方法在哪里?這個(gè)把所有東西啟動起來,并且第一個(gè)被執(zhí)行的方法在哪里?JavaScript代碼里面負(fù)責(zé)實(shí)例化并且把所有東西組合到一起,然后命令應(yīng)用開始運(yùn)行的那個(gè)方法在哪里?

        事實(shí)上,AngularJS并沒有main方法,AngularJS使用模塊的概念來代替main方法。模塊允許我們通過聲明的方式來描述應(yīng)用中的依賴關(guān)系,以及如何進(jìn)行組裝和啟動。使用這種方式的原因如下:

        1.模塊是聲明式的。這就意味著它編寫起來更加容易,同時(shí)理解起來也很容易,閱讀它就像讀普通的英文一樣!

        2.它是模塊化的。這就迫使你去思考如何定義你的組件和依賴關(guān)系,讓它們變得更加清晰。

        3.它讓測試更加容易。在單元測試呂,你可以有選擇地加入模塊,并且可以避免代碼中存在無法進(jìn)行單元測試的內(nèi)容。同時(shí),在場景測試中,你可以加載其他額外的模塊,這樣就可以更好地和其他組件配合使用。

        例如,在我們的應(yīng)用中有一個(gè)叫做"MyAwesomeApp"的模塊。在HTML里面,只要把以下內(nèi)容添加到<html>標(biāo)簽中(或者從技術(shù)上說,可以添加到任何標(biāo)簽中):

復(fù)制代碼 代碼如下:

<html ng-app="MyAwesomeApp">

 ng-app指令就會告訴AngularJS使用MyAwesomeApp模塊來啟動你的應(yīng)用。那么,應(yīng)該如何定義模塊呢?舉例來說,我們建議你為服務(wù)、指令和過濾器分別定義不同的模塊。然后你的主模塊可以聲明依賴這些模塊。

        這樣可以使得模塊管理更加容易,因?yàn)樗鼈兌际橇己玫摹⑼陚涞拇a塊,每個(gè)模塊有且只有一種職能。同時(shí),單元測試可以只加載它們所關(guān)注的模塊,這樣就可以減少初始化的次數(shù),單元測試也會變得更精致、更專注。

二.加載和依賴

        模塊加載動作發(fā)生在兩個(gè)不同的階段,這一點(diǎn)從函數(shù)名上面就可以反映出來,它們分別是Config代碼塊和Run代碼塊(或者叫做階段)。

1.Config代碼塊

        在這一階段里面,AngularJS會連接并注冊好所有數(shù)據(jù)源。因此,只有數(shù)據(jù)源和常量可以注入到Config代碼塊中。那些不確定是否已經(jīng)初始化好的服務(wù)不能注入進(jìn)來。

2.Run代碼塊

        Run代碼塊用來啟動你的應(yīng)用,并且在注射器創(chuàng)建完成之后開始執(zhí)行。為了避免在這一點(diǎn)開始之后再對系統(tǒng)進(jìn)行配置操作,只有實(shí)例和常量可以被注入到Run代碼塊中。你會發(fā)現(xiàn),在AngularJS中,Run代碼塊是與main方法最類似的東西。

三.快捷方法

        利用模塊可以做什么呢?我們可以用它來實(shí)例化控制器、指令、過濾器以及服務(wù),但是利用模塊類還可以做更多事情。如下模塊配置的API方法:

1.config(configFn)

        利用此方法可以做一些注冊工作,這些工作需要在模塊加載時(shí)完成。

2.constant(name, object)

        此方法會首先運(yùn)行,所以你可以用它來聲明整個(gè)應(yīng)用范圍內(nèi)的常量,并且讓它們在所有配置(config方法)和實(shí)例(后面的所有方法,例如controller、service等)方法中可用。

3.controller(name,constructor)

        它的基本作用是配置好控制器方便后面使用。

4.directive(name,directiveFactory)

        可以使用此方法在應(yīng)用中創(chuàng)建指令。

5.filter(name,filterFactory)

        允許你創(chuàng)建命名的AngularJS過濾器,就像前面章節(jié)所討論的那樣。

6.run(initializationFn)

        如果你想要在注射器啟動之后執(zhí)行某些操作,而這些操作需要在頁面對用戶可用之前執(zhí)行,就可以使用此方法。

7.value(name,object)

        允許在整個(gè)應(yīng)用中注射值。

8.factory(name,factoryFn)

        如果你有一個(gè)類或者對象,需要首先為它提供一些邏輯或者參數(shù),然后才能對它初始化,那么你就可以使用這里的factory接口。factory是一個(gè)函數(shù),它負(fù)責(zé)創(chuàng)建一些特定的值(或者對象)。我們來看一個(gè)greeter(打招呼)函數(shù)的實(shí)例,這個(gè)函數(shù)需要一條問候語來初始化:

function Greeter(salutation) {
 this.greet = function(name) {
 return salutation + ' ' + name;
};
}

 greeter函數(shù)示例如下:

myApp.factory('greeter', function(salut) {
 return new Greeter(salut);
});

 然后可以這樣來調(diào)用它:

var myGreeter = greeter('Halo');

9.service(name,object)

        factory和service之間的不同點(diǎn)在于,factory會直接調(diào)用傳遞給它的函數(shù),然后返回執(zhí)行的結(jié)果;而service將會使用"new"關(guān)鍵字來調(diào)用傳遞給它的構(gòu)造方法,然后再返回結(jié)果。所以,前面的greeter Factory可以替換成下面這個(gè)greeter Service:

myApp.service('greeter', Greeter);

 每當(dāng)我們需要一個(gè)greeter實(shí)例的時(shí)候,AngularJS就會調(diào)用新的Greeter()來返回一個(gè)實(shí)例。

10.provider(name,providerFn)

        provider是這幾個(gè)方法中最復(fù)雜的部分(顯然,也是可配置性最好的部分)。provider中既綁定了factory也綁定了service,并且在注入系統(tǒng)準(zhǔn)備完畢之前,還可以享受到配置provider函數(shù)的好處(也就是config塊)。

        我們來看看使用provider改造之后的greeter Service是什么樣子:

myApp.provider('greeter', function() {
 var salutation = 'Hello';
 this.setSalutation = function(s) {
 salutation = s;
}
 function Greeter(a) {
 this.greet = function() {
 return salutation + ' ' + a;
}
}
 this.$get = function(a) {
 return new Greeter(a);
};
});

這樣我們就可以在運(yùn)行時(shí)動態(tài)設(shè)置問候語了(例如,可以根據(jù)用戶使用的不同語言進(jìn)行設(shè)置)。

var myApp = angular.module(myApp, []).config(function(greeterProvider) {
greeterProvider.setSalutation('Namaste');
});
  • angularjs封裝$http為factory的方法

    angularjs封裝$http為factory的方法

    本篇文章主要介紹了angularjs封裝$http為factory的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • 如何以Angular的姿勢打開Font-Awesome詳解

    如何以Angular的姿勢打開Font-Awesome詳解

    這篇文章主要給大家介紹了關(guān)于如何以Angular的姿勢打開Font-Awesome的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Angular具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • 對angularJs中2種自定義服務(wù)的實(shí)例講解

    對angularJs中2種自定義服務(wù)的實(shí)例講解

    今天小編就為大家分享一篇對angularJs中2種自定義服務(wù)的實(shí)例講解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • AngularJS中update兩次出現(xiàn)$promise屬性無法識別的解決方法

    AngularJS中update兩次出現(xiàn)$promise屬性無法識別的解決方法

    最近在工作中用AngularJS中update了兩次之后發(fā)現(xiàn)$promise屬性無法識別了,后來通過查找相關(guān)的資料終于解決了,想著記錄下方便自己或者有需要的朋友,所以本文主要介紹了AngularJS中update兩次出現(xiàn)了$promise屬性無法識別的解決方法,需要的朋友可以參考借鑒。
    2017-01-01
  • Angular中AuthGuard路由守衛(wèi)的創(chuàng)建使用

    Angular中AuthGuard路由守衛(wèi)的創(chuàng)建使用

    這篇文章主要為大家介紹了Angular中AuthGuard路由守衛(wèi)的創(chuàng)建使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • 淺談angular2子組件的事件傳遞(任意組件事件傳遞)

    淺談angular2子組件的事件傳遞(任意組件事件傳遞)

    今天小編就為大家分享一篇淺談angular2子組件的事件傳遞(任意組件事件傳遞),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • 詳解Angular 4 表單快速入門

    詳解Angular 4 表單快速入門

    本篇文章主要介紹了詳解Angular 4 表單快速入門,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • Angular.js中控制器之間的傳值詳解

    Angular.js中控制器之間的傳值詳解

    angular中每個(gè)controller(控制器)都會有自己的$scope,通過為這個(gè)對象添加屬性賦值,就可以將數(shù)據(jù)傳遞給模板進(jìn)行渲染,每個(gè)$scope只會在自己控制器內(nèi)起作用,而有時(shí)候需要用到其他控制器中的數(shù)據(jù)就要考慮到控制器之間參數(shù)的傳遞了,下面來看看詳細(xì)的介紹。
    2017-04-04
  • angular6.0開發(fā)教程之如何安裝angular6.0框架

    angular6.0開發(fā)教程之如何安裝angular6.0框架

    這篇文章主要介紹了angular6.0開發(fā)教程之如何安裝angular6.0框架,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • 最新評論

    阿尔山市| 融水| 宜春市| 张北县| 温宿县| 瑞昌市| 梨树县| 达拉特旗| 九龙坡区| 霸州市| 泌阳县| 宁阳县| 北安市| 汶上县| 乌鲁木齐县| 溧阳市| 阜新市| 屯门区| 资中县| 洮南市| 西丰县| 谢通门县| 临潭县| 荥经县| 沈丘县| 团风县| 鄂尔多斯市| 长子县| 长沙市| 威信县| 龙口市| 邛崃市| 鄯善县| 铜山县| 上饶县| 全州县| 班戈县| 仁寿县| 花莲县| 镇赉县| 蒙山县|