如何将键和值重新组合到对象中?

时间:2014-11-23 14:31:31

标签: json angularjs object angularjs-ng-repeat

在我的Angular应用程序中,我使用ng-repeat遍历我拥有的JSON对象中的所有项目。例如,对于我的JSON对象:

$scope.animals = 
{
     horse: {
          sound: "Nay",
          legs: 4,
     }
     beaver: {
           sound: "thwack",
           legs: 2
     }
}

我想循环以获得一个由Horse, Beaver组成的列表,即

<div ng-repeat="(key, value) in animals">
     <div class="niceBox">
          <h1> {{key}} </h1>
     </div>
</div>

但是对于每只动物,我想要一个按钮来获取整个物体并将其添加到我最喜欢的动物列表中。像这样:

<div ng-repeat="(key, value) in animals">
         <div class="niceBox">
              <h1> {{key}} </h1>
              <div ng-click="addToFavorites(animal)">Add To Favorites</div>
         </div>
    </div>

麻烦我不能将animal作为参数传递,因为我已将ng-repeat分解为(key, value)

如何重组(key, value)以便我可以整体使用该对象?

2 个答案:

答案 0 :(得分:3)

你的问题具有误导性,因为没有原创的&#34;对象&#34;你想重新组装 - 只有属性名称和值。如果你首先有一个动物的物体:

var animals = [{
    name: 'horse',
    sound: ...,
    ...
}, {
    name: 'beaver',
    ...
}, ...];

没有什么可以重新组装&#34;,你只是使用它:

<div ng-repeat="animal in animals">
    {{animal.name}}
    <button ng-click="addToFavorites(animal)">...</button>
</div>

答案 1 :(得分:1)

试试这个

<div ng-repeat="(key, value) in animals">
     <div class="niceBox">
          <h1> {{key}} </h1>
          <div ng-click="addToFavorites(key, value)">Add To Favorites</div>
     </div>
</div>

在您的控制器中

$scope.addToFavorites = function(key, value) {
   $scope.animal = {};
   animal[key] = value;
   /** your code **/

}