LBA
LBA

Reputation: 4109

"Use expression as" in ng-repeat

Building a table I am deep within nested ng-repeats.

Depending on a scope variable I have to display/use a different field from my objects.

Is there a shorter way to adress the decision/field call in a way that could look like 'from now on use expression as myVar'?

Currently my code looks very ugly and basically always repeating a pattern like direction==='sources' ? connection.target.X : connection.source.X

As I am already pretty deep I cannot simply rearrange my array in Controller first.

This is just a small part of it:

<strong>{{direction==='sources' ? connection.target.name : connection.source.name}}</strong>
<br>
<a ng-click="goToEntityUsingReport(direction==='sources' ? connection.target.id : connection.source.id)">
    <i class="fa fa-plus-square-o"></i>
</a>
<a ng-show="hasFurtherConnections(direction==='sources' ? connection.target.id : connection.source.id)" ng-click="setEntityFocus(direction==='sources' ? connection.target.id : connection.source.id)">
    <i class="fa fa-chevron-circle-right"></i>
</a>
{{getEntityTotal(direction==='sources' ? connection.target.id : connection.source.id) | acCurrency}} total)

Upvotes: 0

Views: 37

Answers (1)

korteee
korteee

Reputation: 2692

You can assign this expression on the return statement of a function in your controller in order to look cleaner.

e.g.

$scope.getValueBasedOnProperty(connection, prop) {
  if($scope.direction === 'sources') {
    return connection.target[prop];
  }
  else {
    return connection.source[prop]
  }
}

Then in the view:

<strong>{{getValueBasedOnProperty(connection, 'name')}}</strong>
<br>
<a ng-click="goToEntityUsingReport(getValueBasedOnProperty(connection, 'id')">
    <i class="fa fa-plus-square-o"></i>
</a>

<!-- And goes on ... -->

Upvotes: 1

Related Questions