基於AngularJS的個推前端雲組件探祕

AngularJS是google設計和開發的一套前端開發框架,他能幫助開發人員更便捷地進行前端開發。AngularJS是爲了克服HTML在構建應用上的不足而設計的,它很是全面且簡單易學習,所以AngularJS快速的成爲了javascript的主流框架。javascript

1、Amazing的Angular前端

AnguarJS的特性java

方便的REST: RESTful逐漸成爲了一種標準的服務器和客戶端溝通的方式。你只需使用一行javascript代碼,就能夠快速的從服務器端獲得數據。AugularJS將這些變成了JS對象,做爲Model,遵循MVVM(modelview view-model)設計模式。gulp

MVVM救星:Model將和ViewModel互動(經過$scope對象),並監聽Model的變化。能夠經過View來發送和渲染,由HTML來展現代碼。View能夠經過$routeProvider對象來支配,因此你能夠深度的連接和組織你的View和Controller,將他們變成導航URL。AngualrJS同時提供了無狀態的Controller,能夠用來初始化和控制$scope對象。設計模式

數據綁定和依賴注入:在MVVM設計模式中的任何東西不管發生任何事情都自動的和UI通訊。這幫助咱們去除了wrapper,getter/setter方法或者class定義。AngularJS將幫助咱們處理全部的這些內容,你能夠處理數據像處理基本javascript數據類型般。固然你也能夠經過自定義處理複雜數據。正由於全部事情的發生都是自動的,因此你沒必要調用一個main()來執行你的代碼,而是經過依賴關係來驅動。服務器

可擴展的HTML:大多數網站都是使用非語義的<div>標籤來搭建的。你須要本身在CSS的class中定義相關的DOM層次結構。而使用AngularJS,你能夠像操做XML同樣操做HTML,有無窮的方式來完成標籤和屬性定義。AngularJS經過本身的編譯器和directives來完成相關的設置,而這也是組件實現的基石。網絡

你們接觸jQuery的時候發現,要作事先綁定,取回數據要塞回去,塞的過程都是要本身關心的。可是利用Angular,數據取回來只要注入變量自動完成了,包括事件綁定。數據綁定,MVVM、依賴注入讓你以爲,原先要關心不少東西,如今都不須要關心了,只需更加關心數據結構和業務層,它把咱們從繁瑣DOM綁定中解脫出來。數據結構

2、組件化之路app

組件是對數據和方法的簡單封裝,在此樣式類,指令型等具有UI效果的組件,方法等統稱組件。在大型軟件中,組件化是一種共識,它一方面提升了開發效率,另外一方面下降了維護成本。框架

組件化及組件展示形式

組件化能夠有不少事情能夠作,好比模板化,如今模板化重任交到前端。第二個是公共樣式庫,第三公共函數庫,一些業務組件,模塊化特殊一點。

組件大概展示形式包括: 統一的樣式庫,具備必定HTML結構的代碼片斷,具備一部分JS控制的功能函數,具備必定數據輸入和輸出的控制。

3、揭開雲組件的面紗

雲以及雲組件概念

雲是網絡和互聯網的一種比喻說法。過去每每用雲來表示電信網,後來也用來抽象地表示互聯網和底層基礎設施。

雲服務指經過網絡以按需、易擴展的方式得到所需服務。這種服務能夠是IT和軟件、互聯網相關,也但是其餘服務。它意味着計算能力也可做爲一種商品經過互聯網進行流通。把雲和組件兩者結合則構成了雲組件。說究竟是但願經過一個統一的控制的東西,把N個項目所有控制在一塊兒。

個推的組件類型

個推的組件類型包括樣式類組件、指令型組件、服務型組件、公共過濾器、公共函數庫等。

從組件分類裏能夠發現專屬CSS是樣式類組件,加上模板就是很是簡單的組件,再把加控制器放進去,就是前面講的具備必定JS和必定邏輯的組件,把link加進去,帶了動畫,數據層加進去就具有必定的輸入輸出能力。這個數據層可能包含多種,有多是跟你的頁面控制器交互,也有可能這個組件很是強,本身直接與服務端通訊獲取數據和傳遞數據(固然實際實踐中可能前者更合適當前咱們的環境,後者對統一的接口要求會更高)。

上圖是個推雲組件的技術方案。基於前端三大件和一些其餘庫好比地理圍欄的組件(須要讓百度地圖給咱們整個項目對接起來),還有可視化的項目,好比G20期間杭州某景區人流狀況,可視化項目會用到第三方庫。個推利用LESS寫CSS,基於這些開發雲組件。

根據雲組件的一些狀況個推得出它的最佳實踐對象就是從具備必定通用交互的表格表單類的管理型系統出發,逐漸包含複雜交互的系統應用,並對響應式具備必定的支持。個推是從作推送服務開始,以後有不少產品線。推送服務就會有不少2B、2C的平臺,這就是管理型的。

上圖是個推雲組件採用的目錄結構,用的是gulp打包,CSS裏面有wd文件夾,主要放了一些第三方的庫。更關鍵主要仍是下面,JS也是同樣,wd是基礎庫。第五個是最重要的,全部組件都放在這個文件夾下,每一個組件包含本身專屬的三大件——模板、邏輯、交互、效果和樣式。

基於gulp的打包

雲組件展現站點

雲組件的使用人員主要分爲三大類,第一類是前端使用者(包括泛前端人員),他們須要學習如何使用,快速用組件(須知道Angular的一些基本概念和用法)。第二類是UI設計師、項目和產品等,他們須要觀察效果是不是適合的,根據庫去設計新的此類系統。第三類是遊客和其餘人員。

關於雲組件的新的思考

雲組件牽一髮會動全身,若是雲組件機制運用很差好比一個老的組件更新出了個bug,會產生不少負面影響,這時該怎麼辦?

回到雲的初始之處咱們不難發現,當資源隔絕便不會產生這種影響了(雲組件正是利用其反向思惟達到的便捷),那麼咱們相對將雲組件資源封閉即可以下降這個影響了。這即是版本控制,不一樣項目引用相應的雲,以達到剛纔講的二者之間的平衡,從而成效最優化。

因此,只有合理控制住才能真正發揮雲組件的優點。

多個版本下,咱們的開發模式即是就某個項目的雲組件升級由該項目決定。由於若是雲組件一發版,全部的項目都升級雲組件那這個回測的代價就很高了,何況原有的雲組件版本也是夠以前已經上線的項目的當前版本用了。

個推的項目體系圖

 

實際使用中的問題

雲組件的發版有必定的週期性,但實際項目中的需求要快速響應,這時須要採用雲組件擴展模塊(模式)開發:基於雲組件開發本項目的組件級別的模塊,對雲組件進行擴展或者項目化定製。

4、關於AngularJS的經驗與總結

第1、模塊化:隨時準備模塊化抽象,這是一個動態的過程。 第2、多想一想周邊的,超過所止的部分 —— 換位思考,方便下游,倒推上游。第3、沒有實現不了的效果,只有承受不了的代價。第4、方法有不少,時間容許的話均可以試試。

相關文章
相關標籤/搜索