2012-10-30 31 views
33

dịch vụ của tôi có sử dụng một chuỗi truy vấn do những hạn chế trên máy chủ chạy ASP cổ điển:

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

và tôi muốn bổ sung thêm các thông số chuỗi truy vấn với nó:

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

nhưng url kết quả là

/api/?p=item?test=123 

dường như có một lỗi, nhưng làm thế nào để có được xung quanh nó?

EDIT: đệ này tại https://github.com/angular/angular.js/issues/1511

+0

tại sao bạn sử dụng {test: 123} thay vì {id: 123}? – conradfr

+0

điều này là để kiểm tra cách tham số không được chỉ định trong công việc tài nguyên. bất kỳ thứ gì không được khai báo trong chữ ký sẽ kết thúc trong chuỗi truy vấn. – akonsu

+0

Ok Tôi đã hiểu sai yêu cầu ban đầu của bạn nhưng bây giờ tôi không hiểu tại sao đó là lỗi? – conradfr

Trả lời

68

Bạn có thể sử dụng các thông số tài nguyên. Nếu bạn chưa chỉ định trình giữ chỗ trong đường dẫn, chúng sẽ tự động được chuyển đổi thành thông số chuỗi truy vấn. Giống như:

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

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

Điều này sẽ dẫn đến yêu cầu /api?p=item/1.

P.S.

Tôi cho rằng bạn đã biết điều đó, nhưng bạn không thích điều đó. Nhưng tôi vẫn nghĩ đây là cách chính xác trong trường hợp của bạn. Xem xét thiết kế API xấu bạn đang xử lý với back-end đó, bạn có thể bọc các tài nguyên AngularJS với một dịch vụ khác thực hiện điều này cho bạn.

+3

Ví dụ tốt.Tôi muốn điều này đã được trong hướng dẫn Angular.Tất cả các thông số được hardcoded trong ví dụ tài nguyên $ của họ. –

+0

Tôi không thấy làm thế nào Câu hỏi này thực sự trả lời câu hỏi OP, OP đã biết về việc thêm động một tham số truy vấn và sử dụng một Nhà máy. Thông tin này có thể rất hữu ích, nhưng tôi không hiểu tại sao nó lại được cung cấp thực sự Tôi đã bỏ lỡ điều gì đó trong câu trả lời được đề xuất thêm giá trị bổ sung? – arcseldon

+0

@arcseldon OP có vấn đề với hai ký tự dấu hỏi '? 'trong URL. Điều này khắc phục được vấn đề. Nó cũng chỉ ra rằng các tham số không được xác định như trình giữ chỗ trong đường dẫn đi trong chuỗi truy vấn –

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; 
    }); 
Các vấn đề liên quan