AngularJS 簡介
什么是 AngularJS?
AngularJS 是一個為動態WEB應用設計的結構框架。它能讓你使用HTML作為模板語言,通過擴展HTML的語法,讓你能更清楚、簡潔地構建你的應用組件。它的創新點在于,利用 數據綁定 和 依賴注入,它使你不用再寫大量的代碼了。這些全都是通過瀏覽器端的Javascript實現,這也使得它能夠完美地和任何服務器端技術結合。
AngularJS是為了克服HTML在構建應用上的不足而設計的。HTML是一門很好的為靜態文本展示設計的聲明式語言,但要構建WEB應用的話它就顯得乏力了。所以我做了一些工作(你也可以覺得是小花招)來讓瀏覽器做我想要的事。
通常,我們是通過以下技術來解決靜態網頁技術在構建動態應用上的不足:
- 類庫 - 類庫是一些函數的集合,它能幫助你寫WEB應用。起主導作用的是你的代碼,由你來決定何時使用類庫。類庫有:
jQuery
等 - 框架 - 框架是一種特殊的、已經實現了的WEB應用,你只需要對它填充具體的業務邏輯。這里框架是起主導作用的,由它來根據具體的應用邏輯來調用你的代碼。框架有:
knockout
、sproutcore
等。
AngularJS使用了不同的方法,它嘗試去補足HTML本身在構建應用方面的缺陷。AngularJS通過使用我們稱為標識符(directives)的結構,讓瀏覽器能夠識別新的語法。例如:
- 使用雙大括號
{{}}
語法進行數據綁定; - 使用DOM控制結構來實現迭代或者隱藏DOM片段;
- 支持表單和表單的驗證;
- 能將邏輯代碼關聯到相關的DOM元素上;
- 能將HTML分組成可重用的組件。
端對端的解決方案
AngularJS試圖成為成為WEB應用中的一種端對端的解決方案。這意味著它不只是你的WEB應用中的一個小部分,而是一個完整的端對端的解決方案。這會讓AngularJS在構建一個CRUD(增加Create、查詢Retrieve、更新Update、刪除Delete)的應用時顯得很“固執”(原文為 opinionated,意指沒有太多的其他方式)。但是,盡管它很“固執”,它仍然能確保它的“固執”只是在你構建應用的起點,并且你仍能靈活變動。 AngularJS的一些出眾之處如下:
- 構建一個CRUD應用可能用到的全部內容包括:數據綁定、基本模板標識符、表單驗證、路由、深度鏈接、組件重用、依賴注入。
- 測試方面包括:單元測試、端對端測試、模擬和自動化測試框架。
- 具有目錄布局和測試腳本的種子應用作為起點。
AngularJS的可愛之處
AngularJS通過為開發者呈現一個更高層次的抽象來簡化應用的開發。如同其他的抽象技術一樣,這也會損失一部分靈活性。換句話說,并不是所有的應用都適合用AngularJS來做。AngularJS主要考慮的是構建CRUD應用。幸運的是,至少90%的WEB應用都是CRUD應用。但是要了解什么適合用AngularJS構建,就得了解什么不適合用AngularJS構建。
如游戲,圖形界面編輯器,這種DOM操作很頻繁也很復雜的應用,和CRUD應用就有很大的不同,它們不適合用AngularJS來構建。像這種情況用一些更輕量、簡單的技術如jQuery
可能會更好。
值得一提的是,我們既沒有調用任何AngularJS的方法,也沒有像用框架一樣去編寫某個具體邏輯,就是完成了上述功能。這個實現的背后是因為瀏覽器做了比以往生成 靜態頁面更多的工作,讓它能滿足動態WEB應用的需要。AngularJS使得動態WEB應用的開發門檻降到不需要類庫或者框架的程度。
AngularJS的“禪道(理念)”
Angular信奉的是,當組建視圖(UI)同時又要寫軟件邏輯時,聲明式的代碼會比命令式的代碼好得多,盡管命令式的代碼非常適合用來表述業務邏輯。
- 將DOM操作和應用邏輯解耦是一種非常好的思路,它能大大改善代碼的可調性;
- 將 測試 和 開發 同等看待是一種非常非常好的思路,測試的難度在很大程度上取決于代碼的結構;
- 將客戶端和服務器端解耦是一種特別好的做法,它能使兩邊并行開發,并且使兩邊代碼都能實現重用;
- 如果框架能夠在整個開發流程里都引導著開發者:從設計UI,到編寫業務邏輯,再到測試,那對開發者將是極大的幫助;
- “化繁為簡,化簡為零”總是好的。
AngularJS能將你從以下的噩夢中解脫出來:
- 使用回調: 回調的使用會打亂你的代碼的可讀性,讓你的代碼變得支離破碎,很難看清本來的業務邏輯。移除一些常見的代碼,例如回調,是件好事。大幅度地減少你因為JavaScript這門語言的設計而不得不寫的代碼,能讓你把自己應用的邏輯看得更清楚。
- 手動編寫操作DOM元素的代碼:操作DOM是AJAX應用很基礎的一部分,但它也總是很“笨重”并且容易出錯。用聲明的方式描述的UI界面可隨著應用狀態的改變而變化,能讓你從編寫低級的DOM操作代碼中解脫出來。絕大部分用AngularJS寫的應用里,開發者都不用再自己去寫操作DOM的代碼,不過如果你想的話還是可以去寫。
- 對UI界面讀寫數據: AJAX應用的很大一部是CRUD操作。一個經典的流程是把服務端的數據組建成內部對象,再把對象編成HTML表單,用戶修改表單后再驗證表單,如果有錯再顯示錯誤,然后將數據重新組建成內部對象,再返回給服務器。這個流程里有太多太多要重復寫的代碼,使得代碼看起來總是在描述應用的全部執行流程,而不是具體的業務邏輯和業務細節。
- 開始前得寫大量的基礎性的代碼: 通常你需要寫很多的基礎性的代碼才能實現一個“Hello World”的應用。用AngularJS的話,它會提供一些服務讓你很容易地正式開始寫你的應用,而這些服務都是以一種Guice-like dependency-injection式的依賴注入自動加入到你的應用中去的,這讓你能很快的進入你應用的具體開發。特別的是,你還能全盤掌握自動化測試的初始化過程。
來自:http://www.angularjs.cn/docs/developer/328.html