我将我的Web应用程序部署到带有应用程序上下文的tomcat。 例如,我的URL看起来像这样。
http://localhost:8080/myapp
myapp - 这是应用程序上下文。
现在在Angular服务中如果我想调用一个web服务说getusers
。我的网址应为/myapp/getusers
。但我想避免硬编码应用程序上下文,因为它可能会从一个部署更改为另一个部署。
我设法从$window.location.pathname
计算出上下文路径,但它看起来非常愚蠢。有没有更好的办法?
仅供参考我使用Spring MVC来提供宁静的服务。
答案 0 :(得分:12)
我所做的是在主jsp文件中声明了一个变量。然后,该变量将在整个角度应用程序中可用。
<script type="text/javascript">
var _contextPath = "${pageContext.request.contextPath}";
</script>
在包含其他JavaScript库之前,应该在头文件中编写此代码。
答案 1 :(得分:6)
我也在使用tomcat和Spring MVC。在JavaScript中使用相对URL将起到作用。
为此,您只需在REST网址开头删除/
即可。这样你的网址就会从浏览器中的当前网址开始。
将$resource('/getusers')
替换为$resource('getusers')
答案 2 :(得分: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'
答案 3 :(得分:1)
如果您使用hashbang模式,使用“#”,则可以执行以下操作:
$location.absUrl().substr(0, $location.absUrl().lastIndexOf("#")) + "/getusers"
答案 4 :(得分:1)
在Angular 2中(如果使用hashbang模式)。下面的代码可用于形成网址。
document.location.href.substr(0, document.location.href.lastIndexOf("/#")) + "/getusers";
灵感来自@ jarek-krochmalski的答案
答案 5 :(得分:0)
对于AngularJS $http服务,您最好使用url : 'getusers'
,如下所示:
$scope.postCall = function(obj) {
$http({
method : 'POST',
url : 'getusers',
dataType : 'json',
headers : {
'Content-Type' : 'application/json'
},
data : obj,
});
};
答案 6 :(得分:0)
通常,您应该在控制器中使用注入,如下所示:
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());
....
}]);