0

Here is my json-

{
    topalbums: {
      album: [
        {
          name: "The Very Best of Cher",
          playcount: 1634402,
          mbid: "a7e2dad7-e733-4bee-9db1-b31e3183eaf5",
          url: "http://www.last.fm/music/Cher/The+Very+Best+of+Cher",
          artist: {
            name: "Cher",
            mbid: "bfcc6d75-a6a5-4bc6-8282-47aec8531818",
            url: "http://www.last.fm/music/Cher"
          }
        }
      ]
    }
}

how to get data, through looping, artist.name of every upcoming object using angular controller?

3
  • 1
    Yes, You need to iterate the object as album is an array of objects Commented Mar 25, 2016 at 6:36
  • In controller , how iterate? Commented Mar 25, 2016 at 6:41
  • $scope.data = topTracksService.list; $scope.tracks = $scope.data.track; console.log($scope.tracks); angular.forEach($scope.tracks, function(value, key) { }); Above code not working Commented Mar 25, 2016 at 6:42

3 Answers 3

2

try this.in controller you can use angular foreach like this.

var app = angular.module("app",[])
app.controller('ctrl',['$scope', function($scope){
       $scope.data={
         topalbums: {
           album: [
           {
             name: "The Very Best of Cher",
             playcount: 1634402,
             mbid: "a7e2dad7-e733-4bee-9db1-b31e3183eaf5",
             url: "http://www.last.fm/music/Cher/The+Very+Best+of+Cher",
             artist: {
                name: "Cher",
                mbid: "bfcc6d75-a6a5-4bc6-8282-47aec8531818",
                url: "http://www.last.fm/music/Cher"
              }
             },
            {
             name: "The Very Best of Cher",
             playcount: 1634402,
             mbid: "a7e2dad7-e733-4bee-9db1-b31e3183eaf5",
             url: "http://www.last.fm/music/Cher/The+Very+Best+of+Cher",
             artist: {
                name: "Cher2",
                mbid: "bfcc6d75-a6a5-4bc6-8282-47aec8531818",
                url: "http://www.last.fm/music/Cher"
              }
             }
          ]
         }
       };
  
  
  angular.forEach($scope.data.topalbums,function(album){
    angular.forEach(album,function(a){
      alert(a.artist.name);
       console.log(a.artist.name);
      })
    
    })
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js"></script>
<div ng-app="app" ng-controller="ctrl">
<div class="item item-checkbox">
   <div ng-repeat="album in data.topalbums">
         <p ng-repeat="a in album">{{a.artist.name}}</p>
</div>    
</div>

Sign up to request clarification or add additional context in comments.

1 Comment

I want artist.name in controller part , not on view. In my problem, artist.name is passed to a function in my controller.
0

Let's say you have this json in $scope.allAlbums.

You can iterate the artists name of all the albums using

$scope.allAlbums.topalbums.album.forEach(function(item) {

    console.log(item.artist.name)
})

3 Comments

Got error- angular.min.js:111 TypeError: Cannot read property 'album' of undefined
are you able to print $scope.allAlbums.topalbums in console?
Your error says there is no topalbums in $scope.allAlbums. Check up to that level and make sure your $scope.allAlbums contains the given json.
0

You may try this. names will contain array album names:

var names = data.topalbums.album.map(function(item){
               return item.artist.name;
});

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.