web-dev-qa-db-fra.com

Comment aliaser la propriété d'un objet en tant que variable dans ng-repeat

Je répète sur un tableau d'objets et je veux que ma variable dans la boucle fasse référence à une seule propriété de chaque objet.

Exemple de données simplifié:

var data = [
  {
    'name': {
      'first': 'John',
      'last': 'Johnson'
    }
    'age': 45
  },
  {
    'name': {
      'first': 'Larry',
      'last': 'Wilson'
    }
    'age': 45
  }
]

Je pourrais faire:

<div ng-repeat="person in data">{{ person.name.first }}</div>

Mais ce que je préférerais faire, c'est simplement me concentrer sur la seule partie de l'objet que j'utilise et faire quelque chose comme ceci:

<div ng-repeat="person.name in data as name">{{ name.first }}</div>

Mais cela ne semble pas fonctionner - est-ce possible actuellement?

18
Erik Kallevig

Vous pouvez le faire avec ng-init:

<div ng-repeat="person in data" ng-init="name=person.name">{{ name.first }}</div>

https://docs.angularjs.org/api/ng/directive/ngInit

19
tommybananas

Attention à ne pas utiliser le truc "ng-init". Cela liera la variable "name" à un objet "person" au lieu de créer un alias pour l'expression de données [$ index] .name que vous souhaiterez peut-être.

// Init model.
    data['fooPerson'] = {name: {first:"foo"}, age:64}
    $timeout(function(){
      data['fooPerson'] = {name: {first: "bar"}, age:51}
    }, 1000);
// Result after ~1 second:
// {{ name.first }} --> still "foo";
1
Antern