2013-06-10 7 views
11

Ich habe meine Webanwendung auf Tomcat mit einem Anwendungskontext bereitgestellt. Zum Beispiel sieht meine URL so aus.Was ist der bessere Weg, um den Kontextpfad in Angular JS zu identifizieren

http://localhost:8080/myapp 

myapp - ist die Anwendung hier Kontext.

Jetzt in einem Angular-Dienst, wenn ich einen Webservice anrufen möchte sagen getusers. Meine URL sollte diese /myapp/getusers sein. Aber ich möchte vermeiden, den Anwendungskontext fest zu codieren, da er sich von einer Implementierung zur anderen ändern könnte. Ich habe es geschafft, den Kontextpfad von $window.location.pathname herauszufinden, aber es sieht sehr dumm aus. Gibt es einen besseren Weg?

FYI Ich benutze Spring MVC für erholsame Dienste.

Antwort

3

Den Dienst $location in den Controller injizieren.

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

Wenn Sie in einer nicht-einzelne Seite Anwendung Winkel verwenden, ist diese Methode nicht zuverlässig. z.B. ruft $ {contextPath}/api/delegation/apps auf. Die obige Methode hat keine Ahnung, ob die Anwendung erneut in den Stammkontext oder Seiten aus verschiedenen verschachtelten Pfaden aufgerufen wurde. –

12

Was ich getan habe, ist eine Variable in der Haupt-JSP-Datei deklariert. Dann wird diese Variable während der Winkelanwendung verfügbar sein.

Dieser Code sollte in die Kopfzeile geschrieben werden, bevor andere JavaScript-Bibliotheken eingeschlossen werden.

1

wenn Sie Hash-Bang-Modus verwenden, mit "#" können Sie so etwas zu tun:

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

ich auch tomcat bin mit und Spring MVC. Die Verwendung der relativen URL in JavaScript wird den Zweck erfüllen.

Dazu müssen Sie nur die / am Anfang der REST-URL entfernen. damit Ihre URL von der aktuellen URL in Ihrem Browser startet.

ersetzen $resource('/getusers') mit $resource('getusers')

0

Für AngularJS $http Service Sie sind gut mit url : 'getusers' zu gehen, wie folgt:

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

Im Allgemeinen Sie Injektion in Ihrem Controller wie folgt verwendet werden soll:

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 (bei Verwendung des Hashbang-Modus). Der folgende Code kann zum Erstellen der URL verwendet werden.

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

aus der Antwort von @ jarek-krochmalski Inspired

Verwandte Themen