36

従来の ASP を実行するサーバーの制限により、私のサービスではクエリ文字列を使用する必要があります。

angular
  .module('myServices', ['ng', 'ngResource'])
  .factory('Item', ['$resource',
     function ($resource) {
         return $resource('/api/?p=item/:id');
     }]);

追加のクエリ文字列パラメーターを追加したい:

Item.query({test: 123}, on_success, on_error);

しかし、結果のURLは

/api/?p=item?test=123

どうやらバグがあるようですが、それを回避するにはどうすればよいですか?

編集:これをhttps://github.com/angular/angular.js/issues/1511に提出

4

2 に答える 2

71

リソース パラメータを使用できます。パスにプレースホルダーを指定していない場合、プレースホルダーは自動的にクエリ文字列パラメーターに変換されます。そのように:

angular
    .module('myServices', ['ng', 'ngResource'])
    .factory('Item', [
         '$resource',
         function ($resource) {
             return $resource('/api');
     }]);

Item.query({p: 'item/1'});

これにより、 へのリクエストが発生し/api?p=item/1ます。

PS

あなたはすでにそれを知っていると思いますが、あなたはそれが好きではありません。しかし、私はまだこれがあなたの場合の正しい方法だと思います。そのバックエンドを扱っている悪い API 設計を考慮すると、これを行う別のサービスで AngularJS リソースをラップすることができます。

于 2012-11-11T08:04:52.493 に答える
0
var deferred = $q.defer();
api.api_name.query({
    'param':param_value
},
    function(response) {
        deferred.resolve(response);
    },
    function(response) {
        deferred.reject(response);
    }
);
//
angular
    .module('module_name')
    .factory('api',function($resource){
        var api_var={};
        api_var.api_name = $resource('url?param_key=:param', {
            param: '@param'
        }, {
            'query': {
                method: 'get'
            }
        });
        return api_var;
    });
于 2017-05-06T10:27:27.603 に答える