Angular是什么 ?
AngularJS是一款針對動態(tài)web應(yīng)用的結(jié)構(gòu)框架. 它可以讓像使用模板語言使用HTML, 并且可以擴展HTML的語法來明確簡潔的表示應(yīng)用組件. Angular的數(shù)據(jù)綁定機制和依賴注入機制排除了許多原本你不得不寫的代碼. 它作用于瀏覽端, 使得它成為任何服務(wù)端技術(shù)的良好伙伴.
Angular是為了彌補HTML在構(gòu)建應(yīng)用上的不足而設(shè)計的. 對于靜態(tài)文檔來說, HTML是很不錯的聲明式語言, 但是要構(gòu)建web應(yīng)用, 它卻有些乏力. 所以我不得不做一些工作來讓瀏覽器做我想要的事.
通常, 我們通過以下方式解決動態(tài)應(yīng)用與靜態(tài)網(wǎng)頁之前的不匹配:
庫 --- 一個函數(shù)集合, 我們用它來編寫我們的web應(yīng)用. 我們自己編碼作為主體, 然后我們在合適的時機調(diào)用庫, 例如jQuery.
框架 --- web應(yīng)用的一種特定實現(xiàn), 我們可以在它上面編碼實現(xiàn)具體的邏輯. 在這里, 框架起主導(dǎo)作用, 它可以在應(yīng)用的具體邏輯中調(diào)用你的代碼, 例如: durandal, ember等.
Angular采用了另一種方式. 它試圖通過創(chuàng)建新的HTML結(jié)構(gòu)來彌補HMTL在構(gòu)建應(yīng)用上的不足. Angular通過我們稱之為指令的結(jié)構(gòu), 使瀏覽器可以解析新的語法. 包括:
通過{{ }}通過數(shù)據(jù)綁定
通過DOM控制結(jié)構(gòu)實現(xiàn)迭代或隱藏DOM片段
支持表單和表單驗證
能將代碼關(guān)聯(lián)到DOM元素上
將HTML組成為可重用的組件
完整的客戶端解決方案
在構(gòu)建Web應(yīng)用程序客戶端的總體工程中, Angular不在只是其中的一小部分. 它可以處理你曾經(jīng)手寫的所有DOM和AJAX粘合代碼, 并且把它們放到一個定義好的結(jié)構(gòu)中. 這使得Angular在構(gòu)建CRUD應(yīng)用時有些"固執(zhí)", 但是, 它也試圖確保它的"固執(zhí)"只是你簡單改變的一個開始. Angular提供了以下可靈活變動的功能:
構(gòu)建一個CRUD應(yīng)用所需要的一切包括: data-binding(數(shù)據(jù)綁定機制), basic templating directives(基礎(chǔ)模板指令), form validation(表單驗證), routing(路由), deep-linking(深度鏈接), reusable components(可重用組件), dependency injection(依賴注入).
測試方面: unit-testing(單元測試), end-to-end testing(端到端測試), mocks, test harnesses(模擬和測試工具).
具體目錄布局和測試腳本的種子應(yīng)用作為起點.
Angular的可愛之處
對開發(fā)人員來說, Angular通過提供更高層次的抽象來簡化應(yīng)用程序的開發(fā). 像其他抽象一樣, 這帶來了靈活性的成本. 換句話說, 不是每個應(yīng)用都適合使用Angular. Angular主要是考慮用來構(gòu)建CRUD應(yīng)用. 幸運的是, 多數(shù)web應(yīng)用都是CRUD應(yīng)用. 為了弄懂Angular擅長什么, 我們就得先弄清楚什么樣的應(yīng)用不適合使用Angular.
動畫和GUI編輯器都是具有密集和復(fù)雜DOM操作的應(yīng)用. 這種應(yīng)用與CRUD應(yīng)用是不同的, 它們不太適合使用Angular. 它們更適合使用低層次抽象的庫, 例如jQuery.
Angular之禪
Angular建立在這樣的信念之上: 在創(chuàng)建用界面和組裝軟件方法聲明式語言要優(yōu)于命令式語言, 而命令式語言更擅長表達業(yè)務(wù)邏輯.
從應(yīng)用邏輯中分離DOM操作, 這可以改善代碼的可測試性.
將測試與編碼同等對待, 測試的難度一定程度上取決于代碼的結(jié)構(gòu)化.
前后端(客戶端與服務(wù)端)分離, 前后端開發(fā)同步進行, 有利于前后端代碼的重用.
框架在整個構(gòu)建應(yīng)用的過程中指導(dǎo)開發(fā)者, 從UI設(shè)計到編寫業(yè)務(wù)邏輯, 到測試.
化整為零, 化繁為簡.
Argular會將你從以下苦海中解救出來:
注冊回調(diào)函數(shù):注冊回調(diào)函數(shù)會降低代碼的可讀性, 使代碼變得零散. 應(yīng)該移除像回調(diào)函數(shù)這樣的通用代碼. 這樣會大幅減少(因JavaScript的不足)你不得不寫的JavaScript代碼, 從而使你的應(yīng)用更加清晰.
編程實現(xiàn)HTML DOM操作:操作DOM是AJAX應(yīng)用的基礎(chǔ)內(nèi)容, 但是這往往是繁瑣并且易錯的. 通過聲明的方式, 描述UI是怎樣隨著應(yīng)用的狀態(tài)變化而發(fā)生改變的, 你將從低級的DOM操作中解脫出來. 大多數(shù)Angular應(yīng)用不需要通過編輯來實現(xiàn)DOM操作, 除非你這樣做, 當(dāng)然也是可以的.
在UI頁面中讀寫數(shù)據(jù):CRUD操作占據(jù)了大多數(shù)AJAX應(yīng)用的任務(wù). 從服務(wù)端讀取到的數(shù)據(jù)流封裝成一個內(nèi)部對象傳送到HTML表單中, 用戶修改了表單內(nèi)容后, 將對表單進行驗證, 顯示驗證錯誤信息, 返回一個內(nèi)部模型發(fā)送回服務(wù)端, 這個過程產(chǎn)生了許多重復(fù)代碼. 而Angular消除了幾乎所有的重復(fù)代碼, 使得代碼只描述應(yīng)用的總體流程, 而不是實現(xiàn)細節(jié).
寫大量的初始化代碼:通過你需要編寫許多基礎(chǔ)性的代碼才能實現(xiàn)一個基本的AJAX的"Hello World"應(yīng)用. 使用Angular, 你將可以很容易的通過使用服務(wù)化來初始你的應(yīng)用, 而這些服務(wù)就會像Guice的依賴注入一樣自動注入到你的應(yīng)用當(dāng)中. 你就可以很快的開始開發(fā)你的功能. 并且你還可以全程控制自動化測試的初始化過程.