web-dev-qa-db-ja.com

Angular JSでコンテキストパスを識別するためのより良い方法は何ですか

WebアプリケーションをアプリケーションコンテキストでTomcatにデプロイしています。たとえば、私のURLは次のようになります。

http://localhost:8080/myapp

myapp-はここでのアプリケーションコンテキストです。

Angularサービスで、Webサービスを呼び出したい場合はgetusersと言います。URLは/myapp/getusersにする必要があります。ただし、アプリケーションコンテキストを次のようにハードコーディングすることは避けたいです。デプロイメントごとに変わる可能性があります。$window.location.pathnameからコンテキストパスを把握できましたが、非常にばかげているように見えます。より良い方法はありますか?

参考までに、私は安らかなサービスにSpringMVCを使用しています。

12
darwinbaisa

私が行ったことは、メインのjspファイルで変数として宣言されています。その後、その変数はangularアプリケーション全体で使用可能になります。

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

このコードは、他のJavaScriptライブラリを含める前にヘッダーに記述する必要があります。

12
Omer Arshad

また、TomcatとSpringMVCを使用しています。 JavaScriptで相対URLを使用するとうまくいきます。

これを行うには、REST url。の先頭にある_/_を削除して、URLがブラウザの現在のURLから始まるようにする必要があります。

$resource('/getusers')$resource('getusers')に置き換えます

6
Qianlong

$ 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
Oliver

「#」を使用してハッシュバンモードを使用している場合は、次のようなことができます。

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

AngularJSの場合 $ http サービスはurl : 'getusers'、 次のように:

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

In Angular 2(ハッシュバンモードを使用している場合)。以下のコードを使用してURLを形成できます。

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

@ jarek-krochmalskiの答えからインスピレーションを得た

1
Eljo George

一般に、コントローラーでは次のようにインジェクションを使用する必要があります。

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

....

}]);
0
mapleTiger