Angular2 - 如何中止/取消正在运行的 http 请求调用?

标签 angular

我正在执行搜索自动完成。

keypress(valueSearch){
   // call Ajax search with ValueSearch
   // ....
}

每次按键事件时,我想取消旧的http请求。

最佳答案

事实上,您需要依赖从事件创建的可观察对象。如果您使用默认事件绑定(bind),则无法访问此可观察对象。关于此问题还有待解决的问题:

现在您需要使用 @ViewChild 装饰器引用该元素并在其上配置一个可观察对象:

@ViewChild('someElt')
someElt: ElementRef;

ngAfterViewInit() {
  Observable.fromEvent(someElt.nativeElement, 'keyup');
}

现在您可以利用 switchMap 运算符来喜欢其上的 HTTP 请求。如果数据流中有正在进行的请求,则会被取消:

@ViewChild('someElt')
someElt: ElementRef;

ngAfterViewInit() {
  Observable.fromEvent(someElt.nativeElement, 'keyup').switchMap((evt) => {
    return this.http.get('something').map(res => res.json())
  }).subscribe(data => {
    // use data
  });
}

关于Angular2 - 如何中止/取消正在运行的 http 请求调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37294304/

相关文章:

Angular 4 应用程序无法在 IE11 和 edge 上运行

angular - Material Design Lite 工具提示不适用于 Angular 2

angular - “在 Angular 区域外触发导航”解释

html - 从 Angular 模板获取字符串而不是预期数字并输入 native 元素的值

javascript - 单元测试 Angular 4 得到错误 `TypeError: Cannot read property ' 未定义的订阅'

html - 如何使用 HTML/Angular 元素在浏览器中链接和查看 PDF?

node.js - 将 Angular 4/NodeJS 部署到 Heroku

angular - Ionic 5 上未触发新闻事件

javascript - angular-cli.json 在添加 style.css 时创建错误

javascript - 知道单击了哪个按钮的方法-Angular 5