2013-04-15 2 views
0

considèrent comme suit:champs Concaténation dans AngularJS

<ul class="contracts"> 
      <li ng-repeat="contract in contracts" class="thumbnail"> 
       <h3>ID:{{contract.Id}}</a></h3>      
       <h4>Owner: {{contract.Person.firstName}} {{contract.Person.lastName}}</h4> 
      </li> 
    </ul> 

ok, qui fonctionne, je peux afficher le propriétaire par concaténer le prenom et lastName. Cependant, il vaudrait mieux avoir une propriété FullName quelque part. Cette propriété renverrait soit le prénom + le nom de famille, soit 'None' si Person est null.

Mon problème est que je ne sais pas où ajouter cette propriété. Il est étrange de l'ajouter au contrôleur de contrat, car il est plus lié à la personne. Mais je n'ai pas de contrôleur Person. Quelle serait l'approche pour cela?

Répondre

2

En supposant que vous avez un service de contrat

angular.factory('Contract', ['$resource', function($resource) { 
    var Contract = $resource(...); 
    ... 

    Contract.prototype.getOwner = function() { 
    if (this.Person) { 
     return this.Person.firstName + this.Person.lastName; 
    } 
    return 'None'; 
    } 

    return Contract; 

}]); 

Vous pouvez alors l'utiliser comme

<h4>Owner: {{contract.getOwner()}}</h4> 
+0

J'ai un service de contrat et je pouvais le faire en effet. Est-ce une chose commune à faire? Je sais que je suis ennuyeuse :) Mais je veux juste appliquer les meilleures pratiques autant que possible depuis le début. – Sam

+1

Consultez ce rapport pour en savoir plus et d'autres approches utilisées https://github.com/angular-app/angular-app. Cela semble être une chose raisonnable à faire. Je ne nommerais pas mes propriétés dans PascalCase si (Personne vs personne) – finishingmove

+0

bon point sur le cas. Merci ! – Sam

Questions connexes