2016-04-18 8 views
1

muss ich von einer URL dieses Musters auf GET api/v1/album/:albumId/song/:songId/Pass sub params in url http.get AngularJS

Wie ich diese params in der URL übergeben tun.

Ich versuchte params in
params: { albumId: 2, songId: 4 }

aber der GET-Aufruf wurde gemacht, um api/v1/album/:albumId/song/:songId/?albumId=2&songId=4 statt api/v1/album/2/song/4/

Wie kann dies geschehen, ohne String-Verkettung mit Verwendung?

+0

Verwenden Sie '$ Ressource' anstelle von '$ http'. '$ resource' weiß, wie man das URL-Muster interpoliert, aber' $ http' nicht. – Duncan

+0

Yup, begann ich in diese Richtung zu arbeiten. Danke – Saral

Antwort

1

Wenn Sie RESTful Service zu nutzen, $resource kann einfacher, diese Arbeit machen:

Mehr Infos hier: https://docs.angularjs.org/api/ngResource/service/ $ resource

Beispielcode:

var Song = $resource('/api/v1/album/:albumId/song/:songId/', 
         {albumId: '@albumId', songId: '@songId'}); 

Song.get({albumId: 2, songId: 4}, function(song) { 
    //returned song object 

}); 

//or chaining with promise object 
Song.get({albumId: 2, songId: 4}) 
    .$promise.then(function(song){ 
    //success handler 
    $scope.selectedSong = song; 
}, function() { 
    //failure handler 
}); 

Es gibt mehr Optionen sind abhängig auf Ihre Anforderung. Hoffe, das kann Ihnen helfen :)

+0

Danke David Tao – Saral

0

Params: { .. } sind auf der URL als Querystring verkettet, was in Ihrem Fall passiert ist. Erstellen Sie einfach Ihre URL mit den Parameterwerten, die z.

var url = 'api/v1/album/1/song/2'; 
$http.get(url).then(function(){ .... }); 
+0

Da die Werte von 'albumId' und' songId' von der Eingabe des Benutzers abhängen, wäre die Verwendung einer String-Verkettung eine sichere Option? Gibt es einen anderen Weg als die String-Verkettung? – Saral

+0

Es gibt keinen Unterschied zwischen dem Params-Ansatz und dem, den ich gepostet habe. Er erhält immer noch die Eingabe des Benutzers. Wenn Sie ihn sichern wollen, validieren Sie zuerst die IDs vor dem Aufruf von get. –