Angularjs Musicbrainz使用ng repeat | JSON获取艺术家名称

Angularjs Musicbrainz使用ng repeat | JSON获取艺术家名称,angularjs,json,Angularjs,Json,我在这里有点新,我必须回到Angular去做一个小的应用项目 我必须得到一个艺术家列表,用MusicBrainz(音乐艺术家元数据)提供的JSON对象编写 例如,我通过下面的链接提出了一个请求 http://search.musicbrainz.org/ws/2/artist/?query=muse%20e*&fmt=json 返回一个JSON对象,其中包含带有“muse”标记的研究结果。但是我想在我的html中打印那些“艺术家”的名字 我用的是AngularJS 我在app.js中

我在这里有点新,我必须回到Angular去做一个小的应用项目

我必须得到一个艺术家列表,用MusicBrainz(音乐艺术家元数据)提供的JSON对象编写

例如,我通过下面的链接提出了一个请求

http://search.musicbrainz.org/ws/2/artist/?query=muse%20e*&fmt=json 
返回一个JSON对象,其中包含带有“muse”标记的研究结果。但是我想在我的html中打印那些“艺术家”的名字

我用的是AngularJS

我在app.js中编写了以下代码块:

.controller('artisteCtrl', function($http, $scope){
    $scope.listenoms = [];

    $http.get('http://search.musicbrainz.org/ws/2/artist/?query=muse%20e*&fmt=json')
        .success(function(data){
            $scope.listenoms = data;
            console.log($scope.listenoms);
    })
})
然后,我的HTML ng repeat看起来像:

<ul>
    <li ng-repeat="name in listenoms">
        {{data['artist-list'].artist[0].area}}
    </li>
</ul>
  • {{data['artist-list'].artist[0].area}
什么都没用。它获取对象并在控制台中显示,但我无法访问子对象


谢谢你们的帮助,伙计们

$http响应不是一个数据对象,而是一个响应对象(请参阅),由以下属性组成:

data – {string|Object} – The response body transformed with the transform functions.
status – {number} – HTTP status code of the response.
headers – {function([headerName])} – Header getter function.
config – {Object} – The configuration object that was used to generate the request.
statusText – {string} – HTTP status text of the response.
只需将response.data对象分配给范围属性:

$scope.listenoms = data.data;
或者,为了遵循更好的约定,将数据重命名为“response”,并使用
.then()
而不是
.success()
,因为
.success()
现在被认为是不推荐的:

$http.get('http://search.musicbrainz.org/ws/2/artist/?query=muse%20e*&fmt=json')
    .then(function(response){
        $scope.listenoms = response.data;
        console.log($scope.listenoms);
    }
)
最后,您在模板中使用的有效负载中的对象结构不正确。它应该如下所示:

<ul>
    <li ng-repeat="artist in listenoms['artist-list'].artist">
        {{artist.area}}
    </li>
</ul>
  • {{艺术家区域}

另外,他应该使用
.then()
而不是
.success()
好的,谢谢你们的回答,伙计们,app.js方面更干净,但是对于显示部分,我怎么处理名字中有破折号的孩子呢?比如:“艺术家列表”@MaximeBissonnier我已经更新了我的答案来处理从该端点返回的数据结构。非常感谢@DavidL!你帮了我很多,我希望我不会陷入其他问题。。。我今晚必须处理这个应用程序并完成它。@MaximeBissonnier很乐意帮忙!您没有使用
name
变量,该变量列在您的
ng repeat
块中。我回答了您的问题,您应该将我的答案标记为答案,然后创建一个新问题,否则它会变得过于宽泛,对将来的其他人没有用处。@DavidL哦,好的,很好!谢谢你的建议,我是新来的,很好!没问题:)。只是想给你指出正确的方向!