AngularJS 1.x 學習心得整理(一)


先說明一下,作為一個AngularJS過來人,這系列文章將不會從Hello World! 這樣的新手教學文開始,當然也不是甚麼「我的AngularJS網站一寫就上手」之類的速成甜點...。這是寫給已經充分體驗了用JQuery開發網站好處的開發人員,打算進一步跟AngularJS這個生產力工具Say Hello前必讀的觀念文或者可以稱之為學習指引。

我會說,學AngularJS其實不難,入門還很容易,但學AngularJS很難精通,問題出在搞錯學習重點。所以,啄木鳥才會想寫這樣一篇文章出來分享。

言歸正傳,AngularJS 1.x(官方網站)是一套基於JavaScript語法的網頁前端Framework,2009至今已經問世8年,很多人覺得好用但不容易精通。而剛好我有一些使用經驗可以在這裡分享自己的心得,幫助還沒使用它的人能更瞭解這套Framework。

啄木鳥前陣子因為客戶讓廠商自行決定是否用AngularJS這套JavaScript Framework開發網站前端程式,所以啄木鳥當然立刻把握這個學習機會,並準備在短時間學會操控這套聽聞已久的前端開發框架。

對於早就想試試AngularJS的我來說,之前只是閱讀一些網路技術文章有所理解而已,所以老實的告訴客戶我沒有實際運用AngularJS在任何專案經驗,但根據自我評估及經驗,技術上直覺沒甚麼問題,在成功說服客戶後,就把SPA運用在網站開發且順利結案。

我給AngularJS的評語是:不適合SOHO或單人開發,開發團隊中至少一位能隨時解決問題的AngularJS的網站主任設計師(AD、SD),為專案建立作開發計畫及負責設計所需各類UI範本。

而網站主任設計師的工作重要性雖然無可替代(只要動到架構相關的模組,需要的較高技術水平,各種Web協定知識需求廣泛,因此門檻極高),但是現有AngularJS版本架構功能已完整且成熟毋須自行開發(目前版本為1.6.x)。也因此AD、SD人員學習曲線陡峭但工作輕鬆。

另一方面,相對於網站主任設計師(AD、SD)的高挑戰性,PG卻只要依賴前者提供之UI範本及開發規範就能在瞬間有大量程式碼產出。而且一次性的架構設計可以繁衍出類似的其他專案,屬於高可分工、高可重用的優秀商業框架技術。以下列出幾項技術特色與重點:

AngularJS Framework的真正價值是它提供了SPA應用解決方案

維基百科上說道:「"AngularJS是一款開源JavaScript函式庫,由Google維護,用來協助單一頁面應用程式運行的。它的目標是透過MVC模式(MVC)功能增強基於瀏覽器的應用,使開發和測試變得更加容易。
函式庫讀取包含附加自定義(標籤屬性)的HTML,遵從這些自定義屬性中的指令,並將頁面中的輸入或輸出與由JavaScript變量表示的模型綁定起來。這些JavaScript變量的值可以手工設置,或者從靜態或動態JSON資源中獲取。" 」。

上面這一段說明,啄木鳥覺得它一開始就已經指出了AngularJS Framework的真正價值所在,被稱為「單一頁面應用程序 Single Page Application(SPA) 」的前端框架解決方案才是Google維護團隊研發重點。

為了實現SPA架構,AngularJS提供了前端動態顯示所需的路由組件,它可以透過靜態設定(有URL Route、Status Route兩種),對應由使用者自定義的HTML內容(模板)提供者(provider)。這實在是很方便,而這樣的功能對於只懂傳統的DHTML(Dynamic HTML)開發的人員很難自行研發。

這革命性的功能在於AngularJS實作出瀏覽器的URL Path會被路由模組所識別及動態管理,各位都知道AJAX不需改變當前瀏覽的網址去跟Server溝通,而是利用XMLHttpRequest元件即可在客戶端背景向Server發出請求,由於這樣會造成SPA內容無法定址,解決方法是AngularJS路由所管理產生的網址會符合其當下的顯示內容,這樣的作法才有助於搜尋引擎對SPA架構的SEO,訪客也可以將網址加到我的最愛。因此,它是網站SPA架構的最好解決方案之一,而SPA已經毫無疑問是RESTful網站架構的最好設計方式了。

想讓網站跑得更好更快嗎? 未來勢必都得學會如何開發SPA網站,未來一切向SaaSPaaS靠攏發展的趨勢已經讓Web Base的開發廠商無法單靠傳統的網頁渲染技術(如Server Render和純粹的Dynamic HTML Program)來提供最佳解決方案,這又是另一個值得大書特書的文章了。


留言

  1. 預計內容將會很長,希望能盡快完成。也歡迎各位先進能針對啄木鳥內容謬誤之處指正指教,不勝感激。

    回覆刪除

張貼留言

這個網誌中的熱門文章

揭開 C#.NET 官方原始碼 System.Func、System.Action、System.Delegate 及 delegate 關鍵字背後的技術面紗

從Lambda語法來探討.NET LINQ的技術底蘊到底在哪裡?

C# 物件屬性的建構賦值與初始化 - C# constructor and object initializer