在Angular 2中等效的jQuery ajaxStart

时间:2016-10-19 07:36:06

标签: javascript ajax angular

我想知道Angular 2中是否有等效的ajaxStart或ajaxStop。

我想检查一下是否有ajax进入文档。

根据ajaxStart的 official documentation ,当有任何Ajax请求时会触发它。我想在Angular 2中使用类似的东西。

$( document ).ajaxStart(function() {
  $( "#loading" ).show();
});

我这样做:

  • 进入我的app.component.ts,我展示了我的装载机
  • 当我的ajax成功时,我隐藏了我的装载机

但是,我的某些页面没有ajax调用,所以如果我使用app.component.ts显示我的加载器,则无法隐藏它,因为,没有ajax请求存在于此页。

我想,如果我听说ajax不存在于我的页面中,是否会隐藏我的装载机。

我使用localStorage来保存ajax的状态。 如果页面有ajax,我将值设置为xhr 否则,我会删除存储在localStorage中的状态。 每次,用户都会到达页面。我的脚本检查,如果有一个ajax进入该页面。

app.component.ts

if(localStorage.getITem("xhr")) {
    // action here
}

request.service.ts

...
let checkForAjax: any = {
    setXhr () {
        localStorage.setItem("xhr", "1");
    },
    removeXhr () {
        localStorage.removeItem("xhr");
    }
}
...

进入get请求,我这样做(成功回调之前):

checkForAjax.setXhr()

在get请求的回调中,我只是删除了状态。

checkForAjax.removeXhr()

顺便说一句,在我的ajax成功之后,我还没有xhr状态。因此,如果我将其检入我的app.component.ts,我只是测试我的xhr中是否有属性localStorage

我现在正在工作,但我想用另一种方法来监听角度为2的ajax。

这种方式存在吗? 怎么办呢?

1 个答案:

答案 0 :(得分:1)

你可以使用Promises

https://stackoverflow.com/a/30008115/3152269比我更好地解释了它,但它似乎正好在你的小巷里

我在拍摄ajax请求时通常会做的是承诺在收到回复后运行一些代码。

这使得Ajax调用更容易阅读,并确保代码不会运行,除非您需要它。