国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

利用Angular2的Observables實現(xiàn)交互控制的方法

2024-05-06 15:43:48
字體:
供稿:網(wǎng)友

在Angular1.x中,我們使用Promise來處理各種異步。但是在angular2中,使用的是Reactive Extensions (Rx)的Observable。對于Promise和Observable的區(qū)別,網(wǎng)上有很多文章,推薦egghead.io上的這個7分鐘的視頻(作者 Ben Lesh)。在這個視頻的介紹中,主要說的,使用Observable創(chuàng)建的異步任務(wù),可以被處理,而且是延時加載的。這篇文章里,我們主要針對一些在跟服務(wù)器端交互的時候遇到的問題,來看看Observable給我們帶來的特性。

實例場景

首先,我們來定義一下問題的場景。假設(shè)我們要實現(xiàn)一個搜索功能,有一個簡單的輸入框,當(dāng)用戶輸入文字的時候,實時的利用輸入的文字進行查詢,并顯示查詢的結(jié)果。

問題

在這個簡單的場景當(dāng)中,一般需要考慮3個問題:

不能在用戶輸入每個字符的時候就觸發(fā)搜索。

如果用戶輸入每個字符就觸發(fā)搜索,一來浪費服務(wù)器資源,二來客戶端頻繁觸發(fā)搜索,以及更新搜索結(jié)果,也會影響客戶端的響應(yīng)。一般這個問題,都是通過加一些延時來避免。

如果用戶輸入的文本沒有變化,就不應(yīng)該重新搜索。

假設(shè)用戶輸入了'foo'以后,停頓了一會,觸發(fā)了搜索,再敲了一個字符'o',結(jié)果發(fā)現(xiàn)打錯了,又刪掉了這個字符。如果這個時候用戶又停頓一會,導(dǎo)致觸發(fā)了搜索,這次的文本'foo'跟之前搜索的時候的文本是一樣的,所以不應(yīng)該再次搜索。

要考慮服務(wù)器的異步返回的問題。

當(dāng)我們使用異步的方式往服務(wù)器端發(fā)送多個請求的時候,我們需要注意接受返回的順序是無法保證的。比如我們先后搜索了2個單詞'computer', ‘car', 雖然'car'這個詞是后來搜的,但是有可能服務(wù)器處理這個搜索比較快,就先返回結(jié)果。這樣頁面就會先顯示'car'的搜索結(jié)果,然后等收到'computer'的搜索結(jié)果的時候,再顯示'computer'的結(jié)果。但是,這時候在用戶看來明明搜索的是'car',卻顯示的是另外的結(jié)果。

迎接挑戰(zhàn)

在這個實例中,我們使用wikipedia的api接口來開發(fā)一個簡單的實例,實現(xiàn)簡單的搜索功能。

實現(xiàn)搜索

由于只是演示,我們的app里面只包含2個文件: app.ts 和 wikipedia-service.ts,最終版本的源文件,請參考原文提供的demo鏈接。

我們直接來看最初版本的WikipediaService是如何實現(xiàn)的:

import { Injectable } from '@angular/core';import { URLSearchParams, Jsonp } from '@angular/http';@Injectable()export class WikipediaService {constructor(private jsonp: Jsonp) {}search (term: string) {var search = new URLSearchParams()search.set('action', 'opensearch');search.set('search', term);search.set('format', 'json');return this.jsonp.get('http://en.wikipedia.org/w/api.php?callback=JSONP_CALLBACK', { search }).toPromise().then((response) => response.json()[1]);}}            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 鄂尔多斯市| 呼伦贝尔市| 翁源县| 吉首市| 石屏县| 郎溪县| 张家口市| 兴化市| 英吉沙县| 济阳县| 德保县| 汕尾市| 黄龙县| 双流县| 玉溪市| 罗田县| 灵宝市| 同江市| 城固县| 简阳市| 北票市| 平谷区| 西贡区| 全南县| 阿合奇县| 如东县| 南丰县| 米泉市| 嘉定区| 尤溪县| 綦江县| 工布江达县| 嵊州市| 罗山县| 庐江县| 许昌市| 炉霍县| 嵊州市| 彩票| 全州县| 周宁县|