2013-06-10 13 views
11

Ho la mia applicazione Web distribuita su Tomcat con un contesto applicativo. Ad esempio il mio URL è simile a questo.Qual è il modo migliore per identificare il percorso di contesto in JS angolare

http://localhost:8080/myapp 

myapp - è il contesto dell'applicazione qui.

Ora in un servizio angolare se si desidera chiamare un servizio Web dire getusers. Il mio URL dovrebbe essere questo /myapp/getusers. Ma voglio evitare di codificare il contesto dell'applicazione in quanto potrebbe cambiare da una distribuzione ad un'altra. Sono riuscito a calcolare il contextpath da $window.location.pathname ma sembra molto stupido. C'è un modo migliore?

FYI Sto utilizzando Spring MVC per i servizi di riposo.

risposta

3

Inietta il servizio $location sul controller.

var path = $location.path(); // will tell you the current path 
    path = path.substr(1).split('/'); // you still have to split to get the application context 

// path() is also a setter 
$location.path(path[0] + '/getusers'); 
// $location.path() === '/myapp/getusers' 

// ------------------ \\ 

// Shorter way 
$location.path($location.path() + '/getusers'); 
// $location.path() === '/myapp/getusers' 
+5

Se si utilizza angolare in un non-singola applicazione pagina, questo metodo non è affidabile. per esempio. chiamata $ {contextPath}/api/delegazione/app. Il metodo sopra non ha alcuna idea se l'applicazione è stata ridistribuita nel contesto radice o le pagine sono state chiamate da vari percorsi nidificati. –

12

Quello che ho fatto è dichiarato una variabile nel file jsp principale. Quindi quella variabile sarà disponibile per tutta l'applicazione angolare.

<script type="text/javascript"> 
    var _contextPath = "${pageContext.request.contextPath}"; 
</script> 

Questo codice deve essere scritto nell'intestazione prima di includere altre librerie JavaScript.

1

se si utilizza la modalità hashbang, con "#", si può fare qualcosa di simile:

$location.absUrl().substr(0, $location.absUrl().lastIndexOf("#")) + "/getusers" 
6

Sto anche utilizzando Tomcat e Spring MVC. Usare l'url relativo in JavaScript farà il trucco.

Per fare ciò è sufficiente rimuovere / all'inizio dell'URL REST. in modo che il tuo URL inizi dall'URL corrente nel tuo browser.

sostituire $resource('/getusers') con $resource('getusers')

0

Per AngularJS $http servizio vi sono buone per andare con url : 'getusers', come segue:

$scope.postCall = function(obj) { 
      $http({ 
       method : 'POST', 
       url : 'getusers', 
       dataType : 'json', 
       headers : { 
        'Content-Type' : 'application/json' 
       }, 
       data : obj, 
      }); 
}; 
0

In generale, si consiglia di utilizzare l'iniezione nel controller come il seguente:

angular.module("yourModule").controller("yourController", ["$scope", "yourService", "$location", function($scope, yourService, $location){ 

.... 
     //here you can send the path value to your model. 

     yourService.setPath($location.path()); 

.... 

}]); 
0

In Angular 2 (se si utilizza la modalità hashbang). Sotto il codice può essere usato per formare l'url.

document.location.href.substr(0, document.location.href.lastIndexOf("/#")) + "/getusers"; 

Ispirato dalla risposta di @ Jarek-krochmalski

Problemi correlati