Reputation: 14428
I have an object similar to this:
$scope.division = [
{
name: "Tom",
number: 1
},
{
name: "Greg",
number: 2
}
];
Now in my HTML I'm using ngOption
to display a drop down filled with values from the object.
<select data-ng-model="game.player1" data-ng-options="player.name for player in division">
<option value="" disabled="true">Player 1</option>
</select>
This displays a drop down of names as expected. However, I want to actually display the name and number in the drop down. So for example if I hard-coded it:
<option>1 - Tom</option>
<option>2 - Greg</option>
I've tried various methods including stuff like this:
data-ng-options="player.number player.name for player in division"
But nothing seems to work.
Upvotes: 2
Views: 69
Reputation: 123739
You could just concatenate it in the expression itself.
<select data-ng-model="game.player1"
data-ng-options="(player.number + '-' + player.name) for player in division">
However i would do this on the controller to create that specific view model that needs to be bound, rather than doing it on the view.
angular.module('app', []).controller('ctrl', function($scope){
$scope.game ={player1: 1};
$scope.division = [
{
name: "Tom",
number: 1
},
{
name: "Greg",
number: 2
}
];
})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="ctrl">
<select data-ng-model="game.player1" data-ng-options="player.number as (player.number + '-' + player.name) for player in division">
<option value="" disabled="true">Player 1</option>
</select>
{{game.player1}}
</div>
Upvotes: 2
Reputation: 25421
Try using a formatting function defined in your controller:
$scope.format = function(player) {
return player.number + ' - ' + player.name;
};
Then mark it up like so:
data-ng-options="format(player) for player in division"
Upvotes: 1
Reputation: 104785
You should be able to concatenate like so:
ng-options="(player.number + ' - ' + player.name) for player in division"
Upvotes: 3