使用angular.forEach进行迭代时如何忽略$ -prefixed属性?

时间:2015-03-12 00:42:26

标签: angularjs

Example plnkr

我有一个包含其他对象的对象,如下所示:

var collection = {
  $type: 'people',
  '2a4a24': {name: "Moroni", age: 50},
  '457b9c': {name: "Tiancum", age: 43},
  '59d8ae': {name: "Jacob", age: 27},
};

如果我使用ng-repeat,则忽略$type属性。但是,当我使用angular.forEach时,$type属性包含在迭代中。

这对我来说似乎不一致。如何在忽略$ -prefixed属性的同时迭代集合对象?我是否必须手动检查key.charAt(0) !== '$'

1 个答案:

答案 0 :(得分:2)

是的,你必须自己做。 Angular会在某些指令中自动执行此操作,以防止它迭代始终以美元开头的内部属性。跟踪器上有一个问题:

https://github.com/angular/angular.js/issues/6266

但是你的绝对正确,因为它在受影响的指令的API中完全没有记载,所以它是不一致的。

你的key.charAt(0) !== '$'会解决问题:

angular.forEach($scope.people, function (person, key) {
  if (key.charAt(0) !== '$') {
    $scope.myData.push(person);
  }
});