什么是在Angular JS中识别上下文路径的更好方法

时间:2013-06-10 10:57:59

标签: angularjs spring-mvc contextpath

我将我的Web应用程序部署到带有应用程序上下文的tomcat。 例如,我的URL看起来像这样。

http://localhost:8080/myapp

myapp - 这是应用程序上下文。

现在在Angular服务中如果我想调用一个web服务说getusers。我的网址应为/myapp/getusers。但我想避免硬编码应用程序上下文,因为它可能会从一个部署更改为另一个部署。 我设法从$window.location.pathname计算出上下文路径,但它看起来非常愚蠢。有没有更好的办法?

仅供参考我使用Spring MVC来提供宁静的服务。

7 个答案:

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

....

}]);