今年3月接觸AngularJs,并且在6月的項(xiàng)目中開始應(yīng)用,從踩坑到填坑花了不少時(shí)間,根據(jù)項(xiàng)目中的實(shí)際應(yīng)用情況總結(jié)了一些經(jīng)驗(yàn),如下:

一.UI控件選擇

    Angularjs是不缺控件的,Github里現(xiàn)成的控件非常豐富,基本上足以應(yīng)付一個(gè)普通管理系統(tǒng)中常見的控件需求。但是控件的豐富會(huì)帶來選擇的困難。選擇控件要滿足幾個(gè)原則:
原則1:符合業(yè)務(wù)場(chǎng)景
原則2:控件持續(xù)更新
原則3:滿足性能要求

     舉幾個(gè)例子。首先是上傳附件的控件。項(xiàng)目中要用到附件上傳,谷歌上搜到了三個(gè)控件,分別是
https://github.com/leon/angular-upload
https://github.com/danialfarid/ng-file-upload
https://github.com/nervgh/angular-file-upload

    因?yàn)轫?xiàng)目需要兼容IE9,就重點(diǎn)關(guān)注了這三個(gè)控件對(duì)瀏覽器的兼容性。第一個(gè)控件沒有任何說明,第二個(gè)控件支持IE9,但是前提是要安裝flash,第三個(gè)控件支持IE8和9,但是只支持部分功能。從瀏覽器兼容性的角度考慮,最終選擇了控件三。

     再舉一個(gè)例子,下拉框控件。html原生的select功能比較單一,并且option的樣式很難修改,在前端各個(gè)框架所用的下拉框基本上都是重新實(shí)現(xiàn)的。Angularjs也不例外。項(xiàng)目中剛開始選用了ui-select2。后來在ui-select2的介紹中看到這句話:
This directive is now obsolete. A new initiative, more active, and 100% angular is available at https://github.com/angular-ui/ui-select.
發(fā)現(xiàn)ui-select2已經(jīng)有3年沒有更新了,果斷棄坑選用ui-select。

    最后談?wù)勗瓌t3,還是說ui-select吧,它雖然是ui-select2的改進(jìn)版,但是性能上是存在問題的,根據(jù)stackoverflow上的問答,一個(gè)ui-select里包含過多選擇項(xiàng)或者一個(gè)頁面包含過多ui-select控件時(shí),性能有明顯降低。因?yàn)檫@一點(diǎn),曾考慮用其他控件替換掉ui-select,不過項(xiàng)目中并不存在大數(shù)據(jù)量和過多控件的情況,最后仍然保留了它。在滿足原則1和2和前提下,只能盡量滿足原則3。

   一個(gè)新項(xiàng)目在開發(fā)前,最好能根據(jù)需求調(diào)研可能用到的UI控件,并嘗試寫一些demo,尤其對(duì)復(fù)雜的UI控件。比如ui-grid,有太多的指令和api,花費(fèi)在閱讀文檔和官方實(shí)例代碼的時(shí)間也是一筆不小的投入。

二.自定義指令

    自定義的指令要加命名空間(前綴),防止全局指令名污染,就像javascript中防止全局變量污染一樣。在項(xiàng)目中,某個(gè)頁面出現(xiàn)了這樣的錯(cuò)誤:
Error: [$compile:multidir] Multiple directives [refresh, uiSelectChoices] asking for template on: <ui-select-choices repeat="searchRes in searchRes" refresh="searchMedia($select

網(wǎng)友評(píng)論