Каков лучший способ определить путь контекста в 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