WebアプリケーションをアプリケーションコンテキストでTomcatにデプロイしています。たとえば、私のURLは次のようになります。
http://localhost:8080/myapp
myapp-はここでのアプリケーションコンテキストです。
Angularサービスで、Webサービスを呼び出したい場合はgetusers
と言います。URLは/myapp/getusers
にする必要があります。ただし、アプリケーションコンテキストを次のようにハードコーディングすることは避けたいです。デプロイメントごとに変わる可能性があります。$window.location.pathname
からコンテキストパスを把握できましたが、非常にばかげているように見えます。より良い方法はありますか?
参考までに、私は安らかなサービスにSpringMVCを使用しています。
私が行ったことは、メインのjspファイルで変数として宣言されています。その後、その変数はangularアプリケーション全体で使用可能になります。
<script type="text/javascript">
var _contextPath = "${pageContext.request.contextPath}";
</script>
このコードは、他のJavaScriptライブラリを含める前にヘッダーに記述する必要があります。
また、TomcatとSpringMVCを使用しています。 JavaScriptで相対URLを使用するとうまくいきます。
これを行うには、REST url。の先頭にある_/
_を削除して、URLがブラウザの現在のURLから始まるようにする必要があります。
$resource('/getusers')
を$resource('getusers')
に置き換えます
$ 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'
「#」を使用してハッシュバンモードを使用している場合は、次のようなことができます。
$location.absUrl().substr(0, $location.absUrl().lastIndexOf("#")) + "/getusers"
AngularJSの場合 $ http サービスはurl : 'getusers'
、 次のように:
$scope.postCall = function(obj) {
$http({
method : 'POST',
url : 'getusers',
dataType : 'json',
headers : {
'Content-Type' : 'application/json'
},
data : obj,
});
};
In Angular 2(ハッシュバンモードを使用している場合)。以下のコードを使用してURLを形成できます。
document.location.href.substr(0, document.location.href.lastIndexOf("/#")) + "/getusers";
@ jarek-krochmalskiの答えからインスピレーションを得た
一般に、コントローラーでは次のようにインジェクションを使用する必要があります。
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());
....
}]);