Каков лучший способ определить путь контекста в Angular JS

У меня есть мое веб-приложение, развернутое в tomcat с аппликационным контекстом. Например, мой URL-адрес выглядит примерно так.

http://localhost:8080/myapp

myapp - это контекст приложения.

Теперь в службе Angular, если я хочу позвонить в webservice, скажите getusers. Мой URL должен быть /myapp/getusers. Но я хочу избежать жесткого кодирования контекста приложения, поскольку он может измениться с одного развертывания на другое. Мне удалось вычислить контекстный путь от $window.location.pathname, но он выглядит очень глупо. Есть ли способ лучше?

FYI Я использую Spring MVC для спокойных сервисов.

Ответ 1

То, что я сделал, объявляется переменной в основном файле jsp. Затем эта переменная будет доступна во всем приложении angular.

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

Этот код должен быть написан в заголовке перед включением других библиотек JavaScript.

Ответ 2

Я также использую tomcat и Spring MVC. Использование относительного URL в JavaScript сделает трюк.

Для этого вам просто нужно удалить / в начале URL REST. так что ваш URL-адрес начинается с текущего URL-адреса в вашем браузере.

замените $resource('/getusers') на $resource('getusers')

Ответ 3

Внесите службу $location на ваш контроллер.

 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'

Ответ 4

если вы используете режим hashbang, с "#", вы можете сделать что-то вроде этого:

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

Ответ 5

Для службы AngularJS $http вы можете пойти с url : 'getusers' следующим образом:

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

Ответ 6

В общем, вы должны использовать инъекцию в своем контроллере, как показано ниже:

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());

....

}]);

Ответ 7

В Angular 2 (если используется режим hashbang). Ниже код может быть использован для формирования URL.

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

Вдохновленный от ответа @jarek-krochmalski