使用AngularJS动态分析和修改$ http中的对象属性

时间:2014-03-19 01:27:33

标签: javascript angularjs angular-resource

我有两个链接在一起的$ http查询。第一个从第三方API获取艺术家名称,然后使用AngularJS我从第二个$ http查询填充查询URL,这将从另一个第三方API获得封面。

我发现的问题是,当搜索以“THE”开头的艺术家名称(例如The Smiths)时,第一个API会回复“Smiths,The”,这将不会被第二个API作为艺术家姓名。

如果是这样的话,是否有某种方法可以采取行动来处理艺术家名称收到的结尾为“,”,并在将其解析为第二个$ http查询之前将其更改回来?

以下是相关代码:

$scope.getDetails = function (id) {
  $http.get('http://api.discogs.com/artists/' + id).
    success(function(data) {
        $scope.artist = data;
    });
  $http.get('http://api.discogs.com/artists/' + id + '/releases?page=1&per_page=12').
    success(function(data2) {
        $scope.releases = data2.releases;
    });
  $scope.clicked = true;
  $scope.sliding = true;
 }
}
function ImageCtrl($scope, $http) {
      $scope.image = 'img/record-default.png'; 
      $http.get('http://ws.audioscrobbler.com/2.0/?method=album.getinfo&api_key=e8aefa857fc74255570c1ee62b01cdba&artist=' + $scope.artist.name + '&album=' + $scope.release.title + '&format=json').
        success(function (data4) {
          $scope.image = data4.album.image[2]['#text'];
        }
      );
};

1 个答案:

答案 0 :(得分:1)

将我的评论复制到答案中,因为它似乎有所帮助。

我对问题的建议是观察HTTP请求返回的数据,然后在必要时对监视回调中的任何数据字段进行适当的调整。

$scope.$watch(function() {
    return $scope.artist;
}, function() {
    var pos = $scope.artist.name.toLowerCase().indexOf(', the');
    if (pos != -1) {
        $scope.artist.name = 'The ' + $scope.artist.name.slice(0, pos);
    }
});

如果您确实发现自己稍后会使用大量顺序,相互依赖的HTTP请求,我建议您使用promise chaining。 : - )