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

时间:2015-06-16 11:22:59

标签: php 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}]}

下面, mainalbums 包含专辑,其中 totalAlbumCategory,loadmore,newpage 。 我想从数据中更新第二个相册。我怎么能在angularjs中做到这一点?

2 个答案:

答案 0 :(得分:1)

这些都是Javascript对象和arrays - 你可以直接访问它们。

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

data.mainalbums[1].albums

由于albums是一个数组,您可以使用push()方法添加,如下所示:

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

修改

在您的示例中,您没有类别标识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不允许你使用数字作为普通变量名称。但是,这仍然是做事的首选方式。)

答案 1 :(得分:1)

最后,

我在下面得到了答案(感谢您 Samuel-Jaeschke ): 您还可以使用 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);
        }
       } });

Happie !!