2012-10-30 31 views
33

benim hizmet nedeniyle klasik ASP çalışır sunucuda sınırlamalar bir sorgu dizesi kullanmak zorunda:sorgu dizesi

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

ve buna ek sorgu dizesi parametreleri eklemek istiyorum:

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

ancak ortaya çıkan url

/api/?p=item?test=123 

görünüşte bir hata var, ama nasıl etrafında elde etmektir?

DÜZENLEME: Sen kaynak parametreleri kullanabilirsiniz https://github.com/angular/angular.js/issues/1511

+0

neden {id: 123} yerine {test: 123} kullanıyorsunuz? – conradfr

+0

Bu, kaynakta belirtilen parametrelerin nasıl çalıştığını test etmektir. İmzada bildirilmeyen hiçbir şey, sorgu dizesinde biter. – akonsu

+0

Tamam İlk isteğinizi yanlış anladım ancak şimdi neden bir hata olduğunu görmüyorum? – conradfr

cevap

68

bu açtı. Yolcuları yolunda belirtmediyseniz, bunlar otomatik olarak sorgu dizesi paramlarına dönüştürülür.

Bu, /api?p=item/1 isteğine neden olur.

P.S.

Sanırım bunu zaten biliyorsunuz ama beğenmiyorsunuz. Ama hala sizin durumunuzda bunun doğru yol olduğunu düşünüyorum. Kötü bir API tasarımı düşünürseniz, bu arka uçla uğraşıyorsunuz, AngularJS kaynaklarını sizin için başka bir hizmetle kaplayabilirsiniz.

+3

İyi örnek. Bunun Angular öğreticisinde olmasını isterdim. Tüm parametreler $ kaynak örneklerinde kodlanmış . –

+0

Nasıl görmedim Bu soru aslında OP sorusunu cevapladı: OP, bir sorgu parametresini dinamik olarak eklemeyi ve bir fabrikayı kullanmayı zaten biliyordu. Bilgilerin kendisi çok yararlı olabilir, fakat aslında OP'nin neyin üzerinde ve niçin verildiğini anlamıyorum. Önerilen cevabın içinde fazladan bir değer katan bir şey özledim mi? – arcseldon

+0

@arcseldon OP'lerde iki '?' soru işareti karakteriyle ilgili bir problem vardı.Bu problemi çözdüğü gibi, tanımlanmamış olan paramları da işaret ediyor. Yoldaki yer tutucuları sorgu dizgesinde ilerledikçe –

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; 
    }); 
İlgili konular