亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

簡介可以自動完成UI的AngularJS工具angular-smarty

2019-11-20 12:12:04
字體:
來源:轉載
供稿:網友

201562385429453.png (824×898)

我們最近為我們的論壇增加了一個自動完成功能(稱為Smarty),在要求專業人員簡介的主頁上。這是一個超有用的功能,因為它有助于我們將用戶導航到他們真正想去的地方。它很有意思,也是用AngularJS構建的!

我們希望Smarty能夠:

  1.     通過用戶的給定輸入 (一個前綴),通過一個HTTP請求后自動提供建議
  2.     顯示一個建議的下拉列表
  3.     當用戶輸入時更新
  4.     足夠快,能夠跟得上用戶的輸入
  5.     導航直觀且能夠關閉
  6.     可重用

以往沒有AngularJS的經驗,這個項目是我使用這個框架的入門項目。它真的成為了一次寶貴的學習經驗,而且我發現這個框架許多方面相互借鑒地很好且能很好地符合我上面列出的要求。當然,還有一些問題尚在學習過程中!

AngularJS的樂趣所在

我最喜歡Angular的一點是它是如何分解成具有明確目的的概念的。Smarty廣泛使用了其中的兩個概念――Directives 和 Services。Directive和DOM綁定在了一起,用來管理和元素之間的交互;而Service通過依賴注入的方式為Controller和Directive提供了獨立的可以重用的邏輯。

Angular提供了很多內建的Directive和Service,我們在這個項目中使用到了其中的多個。

    為了顯示建議(見要求2),我們使用了ngIf 和 ngRepeat 指令來有條件的顯示和填充建議下來列表。

    為了實現當用戶輸入的時候更新建議內容(見要求3),我們使用了ngModel 指令將$scope上前綴變量上輸入元素的請求和Scope上的$watch方法雙向綁定起來,用來監聽前綴的變化。

    我們需要考慮的一件事是這個自動完成功能的更新速度可能跟不上用戶的輸入速度(見要求4)。因為每當前綴的值發生變化時,Smarty都要發送一個HTTP請求(通過內建的$http Service)。我們決定用 $http 的可選配置參數($http.get(requestUrl, {cache: true}))來緩存結果。這是提升性能的一個很簡單的方法。

我們還寫了自定義的Directive和Service來滿足我們的特定需求:

    smartySuggestor Service:smartySuggestor 提供了一個getSmartySuggestions()函數,用來接受用戶生成的前綴作為它的參數,并通過http請求訪問我們后端的suggestor服務來得到自動完成的建議。(見要求1)。

    smartyInput Directive: 我們所面臨的一個挑戰是,定義出一個用戶和下拉列表之間的所有可能的交互,并且寫測試用例,以確保在開發期間和開發之后,這些功能都是完好的。我們使用一個Directive(smartyInput)來包含用戶和下拉列表之間所有可能發生的交互(見要求6),同時,我們使用內建的ng-mouseover 和 ng-click 指令(Directive)來定義下拉列表和鼠標事件之間的交互。

正如我前邊所提到的,我們所面臨的一個挑戰是我們要確保我們沒有破壞掉所有用戶和下拉列表之間可能發生的交互方式。為了追蹤這些用戶交互,并確保我們沒有在開發的過程中破壞掉它,我們使用了

學習總結

盡管簡潔實用的AngularJS框架現在對我來講,是可以輕松讀懂的,但是確實要花些時間來學習。隔離作用域綁定指令符和promise是我學習過程中特別棘手的兩項專題。當我研究隔離作用域時,我發現自己十分希望能看到更多的關于人們如何在他們的項目中使用不同綁定的例子,所以下面我為每種綁定類型給出一個例子。
=:本地和父作用域之間的雙向數據綁定

控制器:
 

HTML:
 

SmartyInput指令符:
 

SmartyInput雙向綁定指令符將位于控制器作用域的selected綁定到指令作用域的index索引上面,這樣可以使得在index索引(建議列表中當前選定的索引)中的變化結果與指令(例如用戶按向上/向下箭頭)的相互作用會傳播到控制器。

&: 本地與父作用域之間的單向數據綁定

控制器:
 

HTML:
 

SmartyInput指令符:
 

SmartyInput指令符將控制器作用域中的setSelected()函數綁定到指令作用域中的select()函數上,這樣可以使指令符在不改變setSelected()函數的情況下使用它。
@:將計算表達式綁定到本地作用域

控制器:
 

HTML:
 

SmartySuggestions指令符:
 

通過SmartySuggestions指令符,可在建議菜單中顯示prefix的值,所以此處使用計算表達式{{prefix}}。這種綁定方式在多項復雜表達式中更常用,比如:next-index=“{{selected + 1}}”。

Promises

promise是用于執行異步任務的技術。一個promise具有一個名為then()的方法,該方法在promise執行時會作為被執行的的回調函數的一個參數。當異步任務完成,promise會將一段消息傳給那個回調函數。當用戶輸入的prefix前綴中檢測到更改,則promise就會出現在Smarty的代碼中,然后我們會用$http執行一個GET請求,用來更新顯示給用戶建議的列表。

這個過程看起來是這樣的:

當$scope.$watch在$scope.prefix(請注意,此處綁定到用戶UI輸入界面)的值中注冊了一個更改,此時會調用getSmartySuggesction()。
 

在getSmartySuggesctions()中,$http.get會返回一個參與服務器響應的promise。
 

服務器響應看起來是這樣的:


接下來,我們會調用存在于promise中的then()方法,在解析服務器響應回調中進行傳遞。then()方法返回一個新的promise,它處理了解析過的響應,并存儲到通過getSmartySuggestions()返回的promise中。

解析過的響應看起來是這樣的:[“Portrait Photography”, “Commercial Photography”, “Pet Photography”, “Event Photography”, “Headshot Photography”]。

最終,回到$scope.$watch,我們調用promise中的then()方法,為變量suggestions分配這些解析過的響應。
 

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91av在线看| 成人久久久久久| 日韩欧美极品在线观看| 91久久国产精品91久久性色| 69av视频在线播放| 日本一区二区在线免费播放| 久热国产精品视频| 欧美激情区在线播放| 九九热最新视频//这里只有精品| 欧美精品电影在线| 欧美一区二区大胆人体摄影专业网站| 国产日韩精品一区二区| 97精品久久久中文字幕免费| 亚洲女同性videos| 色妞久久福利网| 国产成人精品亚洲精品| 亚州成人av在线| 亚洲三级av在线| 久久免费精品视频| 136fldh精品导航福利| 色777狠狠综合秋免鲁丝| 伦理中文字幕亚洲| 国产不卡一区二区在线播放| 国产亚洲精品久久久久久牛牛| 亚洲精品电影网| 欧美日本国产在线| 欧美资源在线观看| 日韩精品高清在线| 色偷偷偷亚洲综合网另类| 欧美精品在线免费播放| 亚洲精品福利免费在线观看| 欧美午夜精品久久久久久人妖| 日韩精品免费观看| 亚洲欧美日韩中文视频| 伊人青青综合网站| www.亚洲成人| 中文字幕亚洲一区在线观看| 日韩电影在线观看永久视频免费网站| 久久久久亚洲精品国产| 亚洲福利视频专区| 成人h视频在线| 国产在线拍偷自揄拍精品| 川上优av一区二区线观看| 国产美女直播视频一区| 国产精品专区一| 亚洲国产又黄又爽女人高潮的| 日韩高清电影免费观看完整版| 亚洲国产精品视频在线观看| 欧美在线视频观看免费网站| 国产亚洲一级高清| 欧美性猛交xxxx免费看久久久| 亚洲aⅴ日韩av电影在线观看| 久久成人国产精品| 欧洲精品在线视频| 欧美性一区二区三区| 欧美丝袜一区二区| 2019亚洲日韩新视频| 疯狂做受xxxx欧美肥白少妇| 欧美人与性动交a欧美精品| 欧美日韩亚洲精品内裤| 中文字幕av一区二区三区谷原希美| 欧美成人免费va影院高清| 国产日本欧美一区二区三区在线| 色无极影院亚洲| 亚洲电影免费观看高清| 亚洲欧洲激情在线| 日韩精品在线第一页| 国产精品一区二区久久| 日韩精品中文字幕在线| 久久久久久久一| 久久亚洲精品一区| 亚洲精品日韩丝袜精品| 韩国精品美女www爽爽爽视频| 亚洲中国色老太| 91禁国产网站| 91高潮精品免费porn| 日韩中文字在线| 国产精品尤物福利片在线观看| 91在线中文字幕| 北条麻妃在线一区二区| 国产日韩欧美日韩| 日韩一区二区三区xxxx| 亚洲成人动漫在线播放| 欧美xxxx做受欧美.88| 中文字幕欧美日韩| 亚洲国产精品大全| 亚洲成年网站在线观看| 久久不射热爱视频精品| 日本精品va在线观看| 亚洲美女在线看| 91欧美激情另类亚洲| 91精品国产色综合久久不卡98口| 国产亚洲欧洲黄色| 欧美激情精品久久久久久大尺度| 久久久久国产精品一区| 欧美精品久久久久| 欧美性生交大片免网| 国模叶桐国产精品一区| 欧美精品videos性欧美| 欧美理论片在线观看| 中文字幕欧美日韩在线| 日韩欧美亚洲国产一区| 成人免费福利在线| 国产精品a久久久久久| 人妖精品videosex性欧美| 一区二区三区无码高清视频| 国产成+人+综合+亚洲欧美丁香花| 国产精品久久久久久久久久新婚| 九九热精品视频在线播放| 亚洲欧美日韩国产成人| 国产精品国语对白| 亚洲成人久久久| 亚洲国产一区二区三区在线观看| 国产精品美女久久久久久免费| 欧美日韩成人精品| 久久精视频免费在线久久完整在线看| 神马久久久久久| 亚洲女人被黑人巨大进入al| 92国产精品视频| 国产一区二区成人| 一本色道久久综合狠狠躁篇的优点| 亚洲人在线视频| 97在线精品国自产拍中文| 亚洲xxx自由成熟| 在线观看欧美视频| 性欧美在线看片a免费观看| 久久久久久91| 日韩在线观看视频免费| 国产精品99久久久久久白浆小说| 91精品国产自产在线观看永久| 日韩大片免费观看视频播放| 久久久免费高清电视剧观看| 岛国av一区二区在线在线观看| 26uuu亚洲国产精品| 国产精品久久久av久久久| 国产日韩精品一区二区| 国产精品青青在线观看爽香蕉| 日韩视频在线一区| 国产97人人超碰caoprom| 51精品在线观看| 一本大道香蕉久在线播放29| 久久国产精品影片| 在线观看国产精品淫| 亚洲免费视频一区二区| 日韩第一页在线| 欧美一级黑人aaaaaaa做受| 国产精品欧美亚洲777777| 国内外成人免费激情在线视频网站| 日韩中文字幕网| 日韩电影在线观看免费| 91精品国产高清| 亚洲天堂av图片| 国产精品伦子伦免费视频| 国产精品99久久久久久久久久久久| 亚洲成人免费网站| 91精品国产乱码久久久久久久久| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲成年人在线| 国产97在线亚洲| 国产在线不卡精品| 国产噜噜噜噜久久久久久久久| 亚洲美女av在线| 国产精品成av人在线视午夜片| 精品欧美国产一区二区三区|