AngularJS是一個 MV* 框架,最適於開發客戶端的單頁面應用。它不是個功能庫,而是用來開發動態網頁的框架。它專一於擴展HTML的功能,提供動態數據綁定(data binding),並且它能跟其它框架(如jQuery)合做融洽。若是你要開發的是單頁應用,AngularJS就是你的上上之選。Gmail、Google Docs、Twitter和Facebook這樣的應用,都很能發揮AngularJS的長處。可是像遊戲開發之類對DOM進行大量操縱、又或者單純須要 極高運行速度的應用,就不是AngularJS的用武之地了javascript
多頁面的web應用程序經過後臺服務器程序在HTML中填充數據,而後把結果返回給瀏覽器。單頁面應用程序也成爲AJAX應用程序也是這樣作的,可是作了一些拓展。anjularJS所不一樣的是它是在客戶端完成HTML模板和數據的組合工做。這樣,服務端就成了爲前端提供靜態資源的角色,並對這些資源進行維護。html
讓咱們舉個例子來看看anjularJS是如何在前端組合HTML模板和數據的。咱們來舉一個hello,word例子,但咱們並不把Hello,world寫在html裏,咱們把hello這個問候語寫成咱們能夠再之後更改的數據形式。前端
來看下代碼java
1 <html ng-app>
2 <head> 3 <script src="angular.js"></script> 4 </head> 5 <body> 6 <div ng-controller='HelloController'> 7 <p>{{greeting.text}}, World</p> 8 </div> 9 </body> 10 </html>
MVC應用程序架構是在19世紀70年代做爲Smalltalk的一部分提出來的。自從被提出以來。它就成爲了構建應用程序的流行架構。不管Java、c++仍是OC都能看到MVC的影子。可是MVC對於web應用構建仍是很不成熟。c++
MVC的核心就是處理數據、邏輯和界面的分開。web
視圖從模型中取得數據,展現給用戶。當用戶和應用程序交互的時候。控制器來負責相應。而後更新模型中的數據,模型通知視圖數據的改變而後展現給用戶。編程
在Anjular應用程序中,屬兔就是DOM,控制器是JavaScript的類,模型數據存儲在對象屬性中。瀏覽器
咱們承認MVC由於有這幾個緣由:首先,它給你一個元數據模型來讓你存數據,這樣你不用每次用的時候從新產生數據。你的項目會在理解你寫了什麼上有優點,當他們知道你在使用MVC結構來組織你的代碼。也許最重要的咱們要讓你的app易於拓展維護和測試。服務器
之前的AJAX單頁面應用程序很常見,這樣的平臺有Rails,PHP,JSP幫助咱們建立用戶界面經過拼湊html和數據的方式,而後再把這些送回客戶端展現出來。架構
相似於就Query這樣的庫拓展了這種方式到客戶端,而且使咱們以一種相同的方式。可是能單獨的更新DOM,而不是更新整個頁面。這裏,咱們組合HTML模版和數據,而後插入結果到DOM中經過設置某一元素的innerHtml。
這樣的方式很好。可是當你想插入新的數據到UI中,或者改變基於用戶輸入的數據到正確的狀態,在UI和JavaScript屬性裏。
可是若是咱們能完成這些而不用寫代碼。若是咱們只是生命那部分UI映射那部分JavaScript屬性。讓他嗯自動一步同步。這種編程的風格叫作數據綁定。咱們把這種方式包含在anjularJS中是引文他能與MVC協同工做的很好。這能減小代碼當你寫視圖和模型。把數據從一個地方移動到另外一個地方的工做是自動完成的。
咱們作一個例子解釋。hellocontroller設置了模型greeting.text一次,以後就沒再改變。咱們修改這個例子經過添加一個能改變greeting.text值的文本框使greeting.text可變。
<html ng-app>ng-app屬性告訴Anjular要管理頁面的那些部分。咱們把它加到了HTML元素上。咱們將桃酥Anjular咱們想要它管理整個頁面。這樣作是很常見的。可是你可能想把它放到一個div裏。在這個app裏若是你想用一個已經存在的使用特定方法的app使用集成Anjular來管理頁面<body ng-controller='CartController'>在Angular中,你管理頁面某一部分的javascript類叫作controller。經過包含控制器在body標籤,我就生命了CartController將要管理全部<body>標籤中的全部內容。<div ng-repeat='item in items'>ng-repeat屬性告訴這裏邊的東西是要循環顯示的,,本例中將會產生三個div,每一個都有產品題目,單位價格,總價,還有一個移除按鈕。<span>{{item.title}}</span>經過{{}}來進行數據綁定,咱們能從頁面的其餘部分插入數據,而後使他保持同步<input ng-model='item.quantity'>ng-model作了文本域和屬性之間的數據綁定。{{}}是一種單向數據綁定。咱們同步數據的改變經過使用ng-model。當用戶填寫了一個新值的時候,ng-model改變了item.quantity的值。<span>{{item.price | currency}}</span><span>{{item.price * item.quantity | currency}}</span>anjular提供了一種特性叫作過濾器,使咱們可以格式化文本。有這麼一些列過濾器叫作currency過濾器能格式化美圓。<button ng-click='remove($index)'>Remove</button>咱們傳入了一個$index參數,它表明了ng-repeat的序號,因此咱們知道要刪除的是誰。