2015-01-09 78 views
2

我發現了幾個例子,使用fullRequestInterceptorhttpConfig.timeout來允許取消restangular請求。Restangular - 如何取消/執行我自己的請求

example 1 | example 2

這是我如何加入攔截:

app.run(function (Restangular, $q) { 
     Restangular.addFullRequestInterceptor(function (element, operation, what, url, headers, params, httpConfig) { 

我設法投入超時解決承諾中止請求(在一個錯誤的結果被記錄,並且請求出去,但被取消),這不是我想要的。

我在做什麼 - 我想用自己的請求自己發出AJAX請求,並將結果傳遞迴使用Restangular的任何組件。這可能嗎?

回答

2

我一直在尋找解決它restangular方式,但我一直在尋找一個角度的方式:)

Overriding dependency at runtime in AngularJS

看起來你可以擴展它$http曾經到達Restangular之前。我還沒有嘗試過,但看起來它會滿足我的需求100%。

0

我使用requestInterceptor很多,但只是爲了更改我的請求的參數和標題。

基本上,addFullRequestInterceptor可以幫助您在發送請求前對請求進行更改。那麼爲什麼不改變你想打電話的網址呢?

有可以修改和返回的httpConfig對象,如果它接近配置$http(我敢打賭它是),你可以改變url甚至方法,並將原來的請求更改爲另一個,完全知道。

之後,你不需要超時只返回一個httpConfig自定義您的需要。

RestangularConfigurer.addFullRequestInterceptor(function (element, operation, route, url, headers, params, httpConfig) { 

     httpConfig.url = "http://google.com"; 
     httpConfig.method = "GET"; 
     httpConfig.params = ""; 

     return { 
      httpConfig: httpConfig 
     }; 
    }); 

它會傳遞和您的服務或控制器不知道什麼變化,這是攔截器的原理,它允許你改變的東西,並返回被下一道工序使用有點像中間件。所以對於打電話的人來說這是透明的,但電話會根據你的意願進行。

+0

我讀過關於嘗試中止重新請求並提供緩存結果的人的多個討論。我想更進一步,自己做這個請求。但即使是墮胎也非常醜陋(請求仍然會消失)。我希望有更好的方法。 – Madd0g 2015-01-21 19:29:54