摘要:本書的這一部分將為隨后的章節打下基礎,會涵蓋模板,模塊化,和依賴注入。本書的小例子中我們會使用未經壓縮的,開發友好的版本,在的上。作用域也可以針對特定的視圖來擴展數據和特定的功能。
上一篇:【譯】《精通使用AngularJS開發Web App》(一)
下一篇:【譯】《精通使用AngularJS開發Web App》(三)
原版書名:Mastering Web Application Development with AngularJS
AngularJS速覽Chapter 1
現在我們已經知道了到哪兒去找框架的源碼,以及相關的文檔,現在我們就可以開始編碼了,在實戰中看看AngularJS究竟是什么樣子的。
本書的這一部分將為隨后的章節打下基礎,會涵蓋 AngularJS模板,模塊化,和依賴注入。任何的AngularJS web app 都是由這些基礎組建而成的。
我們對AngularJS的第一印象就用典型的 Hello, World! 來演示,看看用AngularJS是如何來寫的,同時也看看它所使用的語法。
Hello, {{name}}
首先需要引入AngularJS,這樣才能在瀏覽器中正確運行。這就像AngularJS一樣簡單,它最簡單的形式就是引用一個javascript文件。
AngularJS 相對來說還是比較小的:壓縮并gzip之后大概只有30KB,壓縮不gzip的話大概有80KB。它并不依賴任何第三方類庫。
本書的小例子中我們會使用未經壓縮的,開發友好的版本,在Google的CDN上。同時AngularJS的所有版本都可以在這里下載到:http://code.angularjs.org
在實際運行中,僅僅把AngularJS包含進來還不夠,我們還需要啟動這個小應用。最簡單的方式就是使用自定義的屬性 ng-app 。
標簽附近可以看到另一個非標準的 HTML 屬性:ng-init。我們可以使用 ng-init 在模板被渲染之前來初始化模型。最后要說到的就是 {{name}} 表達式,它就是簡單的把模型的值給渲染出來了而已。
即便是在這最開始的、最簡單的小例子中,也可以看到AngularJS模板系統的一些重要特性,如下所示:
- 自定義的 HTML 標簽和屬性可以給本來是靜態的 HTML 文檔增添動態行為。
- 兩個花括號({{expression}})是一個用來輸出模型值的表達式的定界符。
在 AngularJS 中,所有的可以被框架所理解和解析的特殊的 HTML 標簽和屬性都是指令(directive)。
對 AngularJS 來說,渲染模板簡直就是最拿手的工作了;特別是當要構建一個動態web 應用的時候,AngularJS簡直就能發光升仙了。為了讓咱們能欣賞到 AngularJS 的真正的力量,我們就用 input 來擴展一下之前的 Hello World,如下所示:
Say hello to:Hello, {{name}}
這個 input 標簽處了額外的 ng-model 之外簡直就毫無特別之處。真正的魔法力量將會在我們在input 中輸入文字的時候展現。突然之間,屏幕會在每次鍵盤敲擊之后進行重繪,顯示出你所敲打的名字!要刷新一個模板,你并不需要編寫任何一行代碼,我們也沒有被強迫調用任何一個框架的 API 來更新數據模型。AngularJS 是足夠聰明的,可以自動檢測到模型的變化并相應的更新DOM。
大多數的傳統的模板系統渲染模板時都是線性的,單向的:模型(變量)和模板被拼合在一起并將計算的結果輸出。模型的任何改變都需要模板的重新計算。AngularJS無需如此,因為任何的用戶引起的視圖變化,都會立即映射到對應的模型中,同時,任何模型的變化也會馬上傳播到模板中去。
AngularJS中的MVC大部分現存的web應用都是構建在知名的 模型-視圖-控制器(MVC) 模式的某種形式之上。但是 MVC 最大的問題在于,它本身并不是一個非常清晰的模式,而是很高階很結構化的。更糟糕的是,最原始的模式又變異、衍生出很多種模式(最知名的可能是 MVP 和 MVVM)。要加入這些混亂的、不同的框架,開發人員常常會對這些模式做出不同的理解和解釋。這樣的結果就是,用著相同的 MVC 的名號,卻在描述一個不同的架構和編碼實現。Martin Fowler 在他很優秀的關于GUI架構的文章中對此有很好的總結(http://martinfowler.com/eaaDev/uiArchs.html)。
就拿 模型-視圖-控制器 來說,它經常被拿來當作一個模式來說事,但我卻不覺得把它當做一個模式是個什么好事,因為它本身包含了很多不同的思路。不同的人看到 MVC 不同的地方會得出不同的結論,并成他們的理解為 "MVC"。如果這還沒有造成足夠的混亂,那你終將會從 根據對 MVC 的誤解而開發的像 Chinese whispers(一個耳語傳話的游戲,詳見這里) 一樣的系統 中看到最后的效果。
AngularJS團隊本著非常務實的態度來整個MVC模式家族,并宣稱這個框架是基于MVW(模型-視圖-隨便你是啥)模式的。一般說來只有在實踐中見識到來能感受到(究竟如何)。
鳥瞰我們到現在為止所見到的 Hello World都還沒有使用任何的分層策略:數據初始化,邏輯,還有視圖都混在一個文件之中。在任何實際的應用中,我們都需要把更多的注意力放在分配給每層的那些責任上面。幸運的是,AngularJS提供了一些不同的構建方式,可以正確地構建更加復雜的應用。
本書后面的例子都會省略掉 AngularJS 的初始化代碼(引入腳本,ng-app 屬性,等等),這樣更利于閱讀。
我們一起來看看這個稍微修改過的 Hello World:
Say hello to:
Hello, {{name}}!
ng-init 屬性被移除了,然后我們增加了一個新的 ng-controller 指令,以及對應著一個 JavaScript 函數。這個 HelloCtrl 還接受一個相當神秘的 $scope 作為參數:
var HelloCtrl = function ($scope) { $scope.name = "World"; }
AngularJS中的 $scope 對象在這里就是要將 域模型 暴露給視圖(模板)。只需把屬性設置給 scope 實例,就可以在模板渲染時得到這個值。
Scopes(作用域)也可以針對特定的視圖來擴展數據和特定的功能。只要在 scope 實例上定義一些函數就能將特定的 UI 邏輯暴露給模板了。
例如,你可以給 name 變量創建一個 getter 方法,如下所示:
var HelloCtrl = function ($scope) { $scope.getName = function() { return $scope.name; }; }
然后就像下面這樣在模板中使用:
Hello, {{getName()}} !
$scope對象讓我們可以非常精確的控制這個域內的模型的哪一部分,以及哪些操作在視圖層是可用的。理論上來講,AngularJS的 scopes 非常類似于 MVVM 模式的 ViewModel。
控制器的首要任務就是初始化scope對象。在實踐中,初始化的邏輯由下面的這些責任組成:
- 提供模型初始化的值
- 擴展 $scope 的 UI 行為(方法)
控制器都是普通的 JavaScript 函數。他們并不必去繼承一些框架特定提供的類,也不必去調用任何特定的 AngularJS API才能去正確的執行他們的任務。
請注意,控制器在設置模型的初始值時是跟 ng-init指令所做的任務一樣的。有了控制器,才使得使用 JavaScript 來表達初始化的邏輯成為可能,而不必拿代碼把HTML模版搞的一團糟。
AngularJS 的模型就是那些普通的 JavaScript 對象。我們不必被強迫去繼承一些框架的基礎類,也不必以某種特殊的方式來初始化模型對象。
使用任何現有的,純JavaScript類或對象,就跟在模型層一樣的去使用它們也是可以的。同時也沒有被限制說只能使用最原始的值來做模型屬性(任何合法的JavaScript 對象或數組都可以使用)。要把模型暴露給 AngularJS,你只需把它賦值給 $scope 的屬性即可。
AngularJS不是侵入式的,所以可以放心的把任何針對其他框架特定的代碼拿來當作模型使用。
轉載請注明來自[超2真人]
本文鏈接:http://www.peichao01.com/static_content/doc/html/Mastering_Web_Application_Development_with_AngularJS_2.html
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/77978.html
摘要:下一篇譯精通使用開發二原版書名第一章之道這一章主要是介紹,包括這個框架以及它背后的項目。幸運的是,擁有一個活躍的,支持度高的社區。另外,社區還為已經存在的工具箱里貢獻了許多有意思的工具。 下一篇:【譯】《精通使用AngularJS開發Web App》(二) 原版書名:Mastering Web Application Development with AngularJS Ch...
摘要:比如,我們可以監聽事件由實例發出,然后在任何瀏覽器中就是變化的時候都會得到通知,如下所示每一個作用域對象都會有這個方法,可以用來注冊一個作用域事件的偵聽器。這個函數所扮演的偵聽器在被調用時會有一個對象作為第一個參數。 上一篇:【譯】《精通使用AngularJS開發Web App》(二) 下一篇:【譯】《精通使用AngularJS開發Web App》(四) 書名:Mastering W...
摘要:面向對象是自己組裝電腦,硬件已生產完畢。面向過程吃狗屎面向對象狗吃屎確切的講是一種軟件設計規范,早在年的理念就已經誕生。后期的維護成本會減少很多。減輕了開發人員的負擔,也減少了操作邏輯導致業務邏輯混亂的可能性。 什么是MVC,什么是MVVM? 面向過程 --> 面向對象 --> MVC --> MV* 面向過程: 開發人員按照需求邏輯順序開發代碼邏輯,主要思維模式在于如何實現。先細節,...
摘要:上一篇譯精通使用開發四下一篇譯精通使用開發六書名合作對象正如所見,提供了一種將對象組織為模塊的方式。模塊不僅可以注冊可以直接被框架所調用的對象控制器,過濾器等,還可以使用任何應用開發者所定義的對象。 上一篇:【譯】《精通使用AngularJS開發Web App》(四) 下一篇:【譯】《精通使用AngularJS開發Web App》(六) 書名:Mastering Web Applic...
摘要:所以,單向數據流的意思是指在變更檢測期間屬性綁定變更的架構。相反,輸出綁定過程并沒有在變更檢測期間內運行,所以它沒有把單向數據流轉變為雙向數據流。說的單向數據流說的是服務層,而不是視圖層嗷。 原文鏈接: Do you really know what unidirectional data flow means in?Angular 關于單向數據流,還可以參考這篇文章,且文中還有 y...
閱讀 3702·2021-11-23 09:51
閱讀 1360·2021-11-10 14:35
閱讀 4008·2021-09-22 15:01
閱讀 1279·2021-08-19 11:12
閱讀 379·2019-08-30 15:53
閱讀 1690·2019-08-29 13:04
閱讀 3429·2019-08-29 12:52
閱讀 3055·2019-08-23 16:14