21

簡単な例を設定しましょう。

$scope.whatDoesTheFoxSay = function(){
    $http.post("/backend/ancientMystery", {
...

投稿リクエストの送信先の URL をグローバルに変換するにはどうすればよいですか? 基本的に、すべての http リクエストに URL を追加したいと考えています。

私が試したのは$rootScope、アプリケーションの起動時に URL を含む変数を設定することです。しかし、これは私のコードを次のように見せたいものではありません。

$scope.whatDoesTheFoxSay = function(){
    $http.post($rootScope.backendUrl + "/backend/hidingDeepInTheWoods", {
...

調べる必要があると仮定して正しい$httpProvider.defaults.transformRequestですか?誰かが基本的なサンプルコードを提供できますか?

4

3 に答える 3

42

$http でリクエスト インターセプターを使用する別の方法があります。これは、すべての URL を 1 つの共通の場所で処理します。

<!doctype html>
<html ng-app="test">
  <head>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0-rc.2/angular.js"></script>

  </head>
 <body ng-controller="test" >    


<!-- tabs -->


 <script>
     var app = angular.module('test', []);
     app.config(function ($httpProvider) {
         $httpProvider.interceptors.push(function ($q) {
             return {
                 'request': function (config) {
                     config.url = config.url + '?id=123';
                     return config || $q.when(config);

                 }

             }
         });
     });

     app.controller('test', function ($scope,$http) {
         $http.get('Response.txt').success(function (data) { alert(data) }).error(function (fail) {

         });
     });

   </script>
</body>


</html>
于 2013-09-24T14:48:08.010 に答える
0

現代のアプローチは、カスタムHttpクライアントを実装することです。

export function getCustomHttp(xhrBackend: XHRBackend, requestOptions: RequestOptions) {
    return new CustomHttp(xhrBackend, requestOptions);
}

export class CustomHttp extends Http {
    public constructor(backend: XHRBackend, private defaultOptions: RequestOptions) {
        super(backend, defaultOptions);
    }

    public request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
        url = 'https://www.customURL.com/' + url; // Of course, you'd pull this from a config
        return super.request(url, options);
    }
}

app.module次に、次のように単純に変更します。

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule,
    AppRoute,
    RouterModule
  ],
  providers: [
    HttpModule,
    {
      provide: Http,
      useFactory: getCustomHttp,
      deps: [XHRBackend, RequestOptions]
    }
  ],
  bootstrap: [AppComponent]
})

export class AppModule { }
于 2019-04-09T12:36:08.573 に答える
0

$templatecacheこの「AngularJS でのキャッシュ無効化」の問題に遭遇し、リソースを「キャッシュ解除」するオプションも含む実用的なソリューションを共有したいと考えました。

このソリューションは、promise ではなく値を正しく返し、;)リクエストに既に$_GET値が含まれている場合、不正な形式の URL を形成しません。

var __version_number = 6.0; // Date.now('U'); // 'U' -> linux/unix epoch date int

app.config(['$httpProvider', function($httpProvider) {
  $httpProvider.interceptors.push(function () {
    return {
      'request': function (config) {
        // !!config.cached represents if the request is resolved using 
        //      the angular-templatecache
        if (!config.cached) {
          config.url += ( (config.url.indexOf('?') > -1) ? '&' : '?' ) 
            + config.paramSerializer({v: __version_number});
        } else if (config.url.indexOf('no-cache') > -1) {
          // if the cached URL contains 'no-cache' then remove it from the cache
          config.cache.remove(config.url);
          config.cached = false; // unknown consequences
          // Warning: if you remove the value form the cache, and the asset is not
          //          accessable at the given URL, you will get a 404 error.
        }
        return config;
      }
    }
  });
}]);
于 2016-12-02T22:43:57.057 に答える