2013-09-24 8 views
15

Ustawmy prosty przykład:

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

Jak mogę globalnie przekształcenia URL, gdy wniosek jest wysyłany do postu? Zasadniczo chcę poprzedzać adres URL do każdego żądania http.

Próbowałem ustawić zmienną w $rootScope zawierającą adres URL, gdy aplikacja się uruchamia. Ale to nie jest to, co chcę mój kod wyglądać:

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

mam rację zakładając, że należy patrzeć na $httpProvider.defaults.transformRequest? Czy ktoś może podać mi jakiś podstawowy przykładowy kod?

Odpowiedz

37

mam inne podejście przy użyciu żądania przechwytywania z $ http które będą obsługiwać wszystkie adresy URL w jednym wspólnym miejscu

<!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> 
+0

Przy zastosowaniu tego wraz z 'ngToast' pojawia się błąd' Error: [$ kompilacji: tplrt] Szablon do dyrektywy 'tosty' musi mieć dokładnie jeden pierwiastek element' –

+2

'' 'config.url = config. url + '? id = 123'; return config || $ q.when (config); '' 'Zaraz po uzyskaniu dostępu do' '' config.url''', co sprawiłoby, że '' 'config''' miał wartość false? –

0

uruchomiony na ten problem „cache-krach w angularjs” i chciał podzielić pracę rozwiązanie, które obejmuje także opcję "cofania buforowania" zasobów.

To rozwiązanie poprawnie zwraca wartość, a nie obietnicę ;) i nie powoduje nieprawidłowego adresu URL, jeśli żądanie zawiera już wartości $_GET.

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; 
     } 
    } 
    }); 
}]); 
Powiązane problemy