我有一个对象数组,我使用ng-repeat
来迭代它们,这很容易。该数组看起来像这样:
$scope.steps = [
{companyName: true},
{businessType: true},
{physicalAddress: true}
];
我的ng-repeat
属性如下:
<div ng-repeat="step in steps"> ... </div>
在每次迭代中,step
等于其中一个对象,如预期的那样。无论如何都要访问step
对象的键和值?所以我可以这样做:
<div ng-repeat="(stepName, isComplete) in steps"> ... </div>
stepName
== 'companyName'
和isComplete
== true
的位置。我已经尝试过这样做但stepName
总是最终成为步骤对象的索引(这是有意义的)。我只想弄清楚是否有另一种方法来编写ng-repeat
语法,以便我可以获得密钥和值。
感谢您的任何想法/建议。非常感谢。
PS。我目前的工作是在我的控制器中执行此操作:
$scope.stepNames = [];
angular.forEach($scope.steps, function(isComplete, stepName){
$scope.stepNames.push({stepName: stepName, isComplete: isComplete});
});
然后迭代它,但在视图中完成所有操作会很好
答案 0 :(得分:104)
转发器内的转发器
<div ng-repeat="step in steps">
<div ng-repeat="(key, value) in step">
{{key}} : {{value}}
</div>
</div>
答案 1 :(得分:16)
事实上,您的数据设计不佳。你最好使用类似的东西:
$scope.steps = [
{stepName: "companyName", isComplete: true},
{stepName: "businessType", isComplete: true},
{stepName: "physicalAddress", isComplete: true}
];
然后很容易做你想做的事:
<div ng-repeat="step in steps">
Step {{step.stepName}} status : {{step.isComplet}}
</div>
答案 2 :(得分:7)
如果这是您的选项,如果您将数据放入对象形式,它的工作方式与我认为您希望的方式相同:
$scope.steps = {
companyName: true,
businessType: true,
physicalAddress: true
};
这是一个小提琴:http://jsfiddle.net/zMjVp/
答案 3 :(得分:3)
我认为问题在于您设计数据的方式。就语义而言,对我来说,它没有意义。究竟是什么步骤?
是否存储了一家公司的信息?
如果是这样的话,步骤应该是一个对象(参见KayakDave的答案),每个“步骤”应该是一个对象属性。
是否存储了多家公司的信息?
如果是这种情况,则步骤应该是一个对象数组。
$scope.steps=[{companyName: true, businessType: true},{companyName: false}]
在任何一种情况下,您都可以轻松地使用一个(第二个案例为两个)重复数据来迭代数据。
答案 4 :(得分:2)
这是另一种方式,无需嵌套转发器。
可以让ngRepeat迭代一个属性 使用以下语法对象:
<div ng-repeat="(key, value) in steps"> {{key}} : {{value}} </div>
答案 5 :(得分:-1)
似乎在Angular 1.3.12中你不再需要内部ng-repeat,外部循环返回集合的值是单个映射条目