首頁 web前端 js教程 AngularJS Module方法詳解_AngularJS

AngularJS Module方法詳解_AngularJS

May 16, 2016 pm 03:27 PM

AngularJS是什麼?

AngularJs(後面就簡稱ng了)是用來設計動態web應用的結構架構。首先,它是一個框架,不是類別庫,是像EXT一樣提供一整套方案來設計web應用。它不只是一個javascript框架,因為它的核心其實是對HTML標籤的增強。

何為HTML標籤增強?其實就是讓你能夠用標籤完成一部分頁面邏輯,具體方式就是透過自訂標籤、自訂屬性等,這些HTML原生沒有的標籤/屬性在ng中有一個名字:指令(directive)。後面會詳細介紹。那麼,什麼又是動態web應用程式呢?與傳統web系統相區別,web應用能為使用者提供豐富的操作,能夠隨使用者操作不斷更新視圖而不進行url跳轉。 ng官方也聲明它更適用於開發CRUD應用,也就是資料操作比較多的應用,而非遊戲或影像處理類應用。

為了實現這些,ng引入了一些非常棒的特性,包括模板機制、資料綁定、模組、指令、依賴注入、路由。透過資料與模板的綁定,能夠讓我們擺脫繁瑣的DOM操作,而將注意力集中在業務邏輯上。

  另外一個疑問,ng是MVC框架嗎?還是MVVM框架?官網有提到ng的設計採用了MVC的基本思想,而又不完全是MVC,因為在書寫代碼時我們確實是在用ng-controller這個指令(起碼從名字上看,是MVC吧),但這個controller處理的業務基本上都是與view進行交互,這麼看來又很接近MVVM。讓我們把目光移到官網那個非醒目的title上:「AngularJS — Superheroic JavaScript MVW Framework」。

AngularJS中的Module類別負責定義應用程式如何啟動,它也可以透過宣告的方式定義應用程式中的各個片段。讓我們來看看它是如何實現這些功能的。

一.Main方法在哪裡

        如果你是從Java或Python程式語言轉過來的,那你可能很想知道AngularJS裡面的main方法在哪裡?這個把所有東西啟動起來,第一個被執行的方法在哪裡? JavaScript程式碼裡面負責實例化並且把所有東西組合在一起,然後命令應用開始運行的那個方法在哪裡?

        事實上,AngularJS並沒有main方法,AngularJS使用模組的概念來取代main方法。模組允許我們透過聲明的方式來描述應用程式中的依賴關係,以及如何進行組裝和啟動。使用這種方式的原因如下:

        1.模組是宣告式的。這就意味著它寫起來更加容易,同時理解起來也很容易,閱讀它就像讀普通的英文一樣!

        2.它是被模組化的。這就迫使你去思考如何定義你的元件和依賴關係,讓它們變得更加清晰。

        3.它讓測驗變得更容易。在單元測試呂,你可以選擇性地加入模組,並且可以避免程式碼中存在無法進行單元測試的內容。同時,在場景測試中,你可以載入其他額外的模組,這樣就可以更好地和其他組件一起使用。

        例如,在我們的應用上有一個叫做"MyAwesomeApp"的模組。在HTML裡面,只要把以下內容加到標籤中(或從技術上說,可以加到任何標籤中):

複製程式碼 程式碼如下:


 ng-app指令就會告訴AngularJS使用MyAwesomeApp模組來啟動你的應用程式。那麼,應該如何定義模組呢?舉例來說,我們建議你為服務、指令和篩選器分別定義不同的模組。然後你的主模組可以宣告依賴這些模組。

        如此可以讓模組管理更容易,因為它們都是良好的、完整的程式碼區塊,每個模組有且只有一種職能。同時,單元測試可以只載入它們所關注的模組,這樣就可以減少初始化的次數,單元測試也會變得更精緻、更專注。

二.載入與依賴

        模組載入動作發生在兩個不同的階段,這點從函數名稱上面就可以反映出來,它們分別是Config程式碼區塊和Run程式碼區塊(或稱為階段)。

1.Config程式碼區塊

        在此階段裡面,AngularJS會連結並註冊所有資料來源。因此,只有資料來源和常數可以注入到Config程式碼區塊中。那些不確定是否已經初始化好的服務不能注入進來。

2.Run程式碼區塊

        Run程式碼區塊用來啟動你的應用,並且在註射器創建完成之後開始執行。為了避免在這一點開始之後再對系統進行配置操作,只有實例和常數可以被注入到Run程式碼區塊中。你會發現,在AngularJS中,Run程式碼區塊是與main方法最類似的東西。

三.快速方法

        利用模組可以做什麼?我們可以用它來實例化控制器、指令、過濾器以及服務,但利用模組類別還可以做更多事情。如下模組配置的API方法:

1.config(configFn)

        利用此方法可以做一些註冊工作,這些工作需要在模組載入時完成。

2.constant(name, object)

        此方法會先運行,所以你可以用它來宣告整個應用範圍內的常數,並且讓它們在所有配置(config方法)和實例(後面的所有方法,例如controller、service等)方法中可用。

3.controller(name,constructor)

        它的基本功能是使用控制器方便後面使用。

4.directive(name,directiveFactory)

        可使用此方法在應用程式中建立指令。

5.filter(name,filterFactory)

        允許你創建命名的AngularJS過濾器,就像前面章節所討論的那樣。

6.run(initializationFn)

        如果你想要在註射器啟動之後執行某些操作,而這些操作需要在頁面對使用者可用之前執行,就可以使用此方法。

7.value(name,object)

        允許在整個應用中註射數值。

8.factory(name,factoryFn)

        如果你有一個類別或對象,並且需要先為它提供一些邏輯或參數,然後才能對它初始化,那麼你就可以使用這裡的factory介面。 factory是一個函數,它負責建立一些特定的值(或物件)。我們來看一個greeter(打招呼)函數的實例,這個函數需要一個問候語來初始化:

function Greeter(salutation) {
 this.greet = function(name) {
 return salutation + ' ' + name;
};
}
登入後複製

 greeter函數範例如下:

myApp.factory('greeter', function(salut) {
 return new Greeter(salut);
});
登入後複製

 然後可以這樣來呼叫它:

var myGreeter = greeter('Halo');
登入後複製

9.service(name,object)

        factory和service之間的不同點在於,factory會直接呼叫傳遞給它的函數,然後回傳執行的結果;而service將會使用"new"關鍵字來呼叫傳遞給它的建構方法,然後再傳回執行的結果;而service將會使用"new"關鍵字來呼叫傳遞給它的建構方法,然後再傳回執行的結果;而service將會使用"new"關鍵字來呼叫傳遞給它的建構方法,然後再傳回返回結果。所以,前面的greeter Factory可以替換成下面這個greeter Service:

myApp.service('greeter', Greeter);
登入後複製

每当我们需要一个greeter实例的时候,AngularJS就会调用新的Greeter()来返回一个实例。

10.provider(name,providerFn)

provider是这几个方法中最复杂的部分(显然,也是可配置性最好的部分)。provider中既绑定了factory也绑定了service,并且在注入系统准备完毕之前,还可以享受到配置provider函数的好处(也就是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);
};
});
登入後複製

这样我们就可以在运行时动态设置问候语了(例如,可以根据用户使用的不同语言进行设置)。

var myApp = angular.module(myApp, []).config(function(greeterProvider) {
greeterProvider.setSalutation('Namaste');
});
登入後複製
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

在JavaScript中替換字符串字符 在JavaScript中替換字符串字符 Mar 11, 2025 am 12:07 AM

JavaScript字符串替換方法詳解及常見問題解答 本文將探討兩種在JavaScript中替換字符串字符的方法:在JavaScript代碼內部替換和在網頁HTML內部替換。 在JavaScript代碼內部替換字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 該方法僅替換第一個匹配項。要替換所有匹配項,需使用正則表達式並添加全局標誌g: str = str.replace(/fi

構建您自己的Ajax Web應用程序 構建您自己的Ajax Web應用程序 Mar 09, 2025 am 12:11 AM

因此,在這裡,您準備好了解所有稱為Ajax的東西。但是,到底是什麼? AJAX一詞是指用於創建動態,交互式Web內容的一系列寬鬆的技術。 Ajax一詞,最初由Jesse J創造

10個JQuery Fun and Games插件 10個JQuery Fun and Games插件 Mar 08, 2025 am 12:42 AM

10款趣味橫生的jQuery遊戲插件,讓您的網站更具吸引力,提升用戶粘性!雖然Flash仍然是開發休閒網頁遊戲的最佳軟件,但jQuery也能創造出令人驚喜的效果,雖然無法與純動作Flash遊戲媲美,但在某些情況下,您也能在瀏覽器中獲得意想不到的樂趣。 jQuery井字棋遊戲 遊戲編程的“Hello world”,現在有了jQuery版本。 源碼 jQuery瘋狂填詞遊戲 這是一個填空遊戲,由於不知道單詞的上下文,可能會產生一些古怪的結果。 源碼 jQuery掃雷遊戲

如何創建和發布自己的JavaScript庫? 如何創建和發布自己的JavaScript庫? Mar 18, 2025 pm 03:12 PM

文章討論了創建,發布和維護JavaScript庫,專注於計劃,開發,測試,文檔和促銷策略。

jQuery視差教程 - 動畫標題背景 jQuery視差教程 - 動畫標題背景 Mar 08, 2025 am 12:39 AM

本教程演示瞭如何使用jQuery創建迷人的視差背景效果。 我們將構建一個帶有分層圖像的標題橫幅,從而創造出令人驚嘆的視覺深度。 更新的插件可與JQuery 1.6.4及更高版本一起使用。 下載

如何在瀏覽器中優化JavaScript代碼以進行性能? 如何在瀏覽器中優化JavaScript代碼以進行性能? Mar 18, 2025 pm 03:14 PM

本文討論了在瀏覽器中優化JavaScript性能的策略,重點是減少執行時間並最大程度地減少對頁面負載速度的影響。

Matter.js入門:簡介 Matter.js入門:簡介 Mar 08, 2025 am 12:53 AM

Matter.js是一個用JavaScript編寫的2D剛體物理引擎。此庫可以幫助您輕鬆地在瀏覽器中模擬2D物理。它提供了許多功能,例如創建剛體並為其分配質量、面積或密度等物理屬性的能力。您還可以模擬不同類型的碰撞和力,例如重力摩擦力。 Matter.js支持所有主流瀏覽器。此外,它也適用於移動設備,因為它可以檢測觸摸並具有響應能力。所有這些功能都使其值得您投入時間學習如何使用該引擎,因為這樣您就可以輕鬆創建基於物理的2D遊戲或模擬。在本教程中,我將介紹此庫的基礎知識,包括其安裝和用法,並提供一

使用jQuery和Ajax自動刷新DIV內容 使用jQuery和Ajax自動刷新DIV內容 Mar 08, 2025 am 12:58 AM

本文演示瞭如何使用jQuery和ajax自動每5秒自動刷新DIV的內容。 該示例從RSS提要中獲取並顯示了最新的博客文章以及最後的刷新時間戳。 加載圖像是選擇

See all articles