如何在 angularjs 的数组中添加/追加新加载的数据


How to add/append new loaded data in array in angularjs?

在这里,我从angularjs加载了数据,如下所示:

{"mainalbums":
[{"iCategoryID":"1","vCategoryName":"Hip Hop",
"albums":
[{"iAlbumID":"23","vAlbumName":"Mychoice 1"},{"iAlbumID":"30","vAlbumName":"Mychoice 2"}],
"totalAlbumCategory":2,
"loadmore":"false",
"newpage":1},
{"iCategoryID":"3","vCategoryName":"Country",
"albums":
[{"iAlbumID":"31","vAlbumName":"Dil Dhadkne Do 1"},
{"iAlbumID":"31","vAlbumName":"Dil Dhadkne Do 2"}],
"totalAlbumCategory":1,
"loadmore":"false",
"newpage":1},
{"iCategoryID":"4","vCategoryName":"Remixes",
"albums":[
{"iAlbumID":"25","vAlbumName":"Love me thoda aur 1"},{"iAlbumID":"26","vAlbumName":"Love me thoda aur 2"},
"totalAlbumCategory":4,"loadmore":"true","newpage":1}]}

这里主专辑有有totalAlbumCategory,loadmore,newpage专辑。我想从数据中更新第二张专辑。如何在 angularjs 中做到这一点?

这些都是Javascript对象和数组 - 你可以简单地访问它们。

例如,如果您的问题中的对象称为 data ,则可以使用以下方法获取第二个(索引1)对象的albums数组:

data.mainalbums[1].albums

由于albums是一个数组,因此可以使用 push() 方法进行追加,如下所示:

data.mainalbums[1].albums.push({"iAlbumID":"31","vAlbumName":"Dil Dhadkne Do 3"});

编辑:

在您的示例中,您没有类别 id 2 ,这当前会导致您出现问题,因为您必须通过数组索引而不是实际 id 访问类别。由于您的类别具有 ID,因此您可能会发现,通过将mainalbums相册更改为对象而不是数组,可以更轻松地整理相册。

例如,如果要像这样定义对象:

{"mainalbums": {
  "1": {
    "iCategoryID":"1", "vCategoryName":"Hip Hop",
    "albums": [
      {"iAlbumID":"23","vAlbumName":"Mychoice 1"},
      {"iAlbumID":"30","vAlbumName":"Mychoice 2"}
    ],
    "totalAlbumCategory":2,
    "loadmore":"false",
    "newpage":1
  },
  "3": {
    "iCategoryID":"3", "vCategoryName":"Country",
    "albums": [
      {"iAlbumID":"31","vAlbumName":"Dil Dhadkne Do 1"},
      {"iAlbumID":"31","vAlbumName":"Dil Dhadkne Do 2"}
    ],
    "totalAlbumCategory":1,
    "loadmore":"false",
    "newpage":1
  },
  "4": {
    "iCategoryID":"4","vCategoryName":"Remixes",
    "albums":[
      {"iAlbumID":"25","vAlbumName":"Love me thoda aur 1"},
      {"iAlbumID":"26","vAlbumName":"Love me thoda aur 2"}
    ],
    "totalAlbumCategory":4,
    "loadmore":"true",
    "newpage":1
  }
}

然后,您可以使用如下所示的类别 ID 访问它:

data.mainalbums['3'].albums

当然,这取决于您是否可以控制此对象的构造方式。

(注意:mainalbums 现在是一个对象,而不是一个数组,但这个符号是必需的,因为我们需要引用数字。JavaScript 不允许你使用数字作为普通变量名称。但是,这仍然是首选的做事方式。

最后,

我得到了下面的答案(谢谢塞缪尔-杰施克):您也可以使用 concat

$http.get('store/LoadAlbums/', {'iCategoryID': iCategoryID}).then(function (data) {
      for (var i = 0; i < $scope.result.mainalbums.length; i++) {
         if($scope.result.mainalbums[i].iCategoryID == iCategoryID){
            $scope.result.mainalbums[i].albums = $scope.result.mainalbums[i].albums.concat(data.data.albums);
            $scope.result.mainalbums[i].totalAlbumCategory = $scope.result.mainalbums[i].albums.concat(data.data.totalAlbumCategory);
            $scope.result.mainalbums[i].loadmore = $scope.result.mainalbums[i].albums.concat(data.data.loadmore);
            $scope.result.mainalbums[i].newpage = $scope.result.mainalbums[i].albums.concat(data.data.newpage);
        }
       } });

快乐!!