J'utilise ng-options
pour générer une balise select dont les options sont des emplacements. Les étiquettes sont les noms d'emplacement et les valeurs sont l'ID d'emplacement (dans la base de données).
J'ai lié la valeur (ID d'emplacement) à un attribut ng-model
, mais j'aimerais également lier l'étiquette (nom d'emplacement) à un attribut ng-model
différent. (Je dois séparer le champ id
car il sera envoyé à un serveur qui attend cet attribut particulier.) Quelle est la meilleure façon de procéder dans Angular?
Mon code:
<div ng-app="app"><div ng-controller="edit">
<select ng-model="purchase.pickUpLocationId" ng-options="loc.id as loc.name for loc in purchase.availableLocations"></select>
<!-- This is the model not yet bound: -->
<p>You have selected {{ purchase.pickUpLocationName }}</p>
</div></div>
var app = angular.module('app', []);
app.controller('edit', ['$scope', function($scope) {
$scope.purchase = {
pickUpLocationId: 30,
availableLocations: [
{id: 20, name: "Charleston, SC"},
{id: 30, name: "Atlanta, GA"},
{id: 40, name: "Richmond, VA"},
]
};
}]);
Vous pouvez modifier ce qui suit et lier l’objet entier. Vous aurez toujours accès à id
ultérieurement pour tout ce que vous souhaitez en faire.
<select ng-model="selected" ng-options="loc as loc.name for loc in purchase.availableLocations"></select>
<p>You have selected {{ selected.name }}</p>
<p>You havd id too! {{ selected.id }}</p>
Ma suggestion est de modéliser d'abord comme un hachage
{
"20": "Charleston, SC",
"30": "Atlanta, GA"
}
puis utilisez {{availableLocations[purchase.pickUpLocationId]}}
et faire ng-options comme
<select ng-model="purchase.pickUpLocationId" ng-options="id as label for (id, label) in purchase.availableLocations"></select>
Réponse scniro mise à jour
<div ng-app="app">
<div ng-controller="ctrl">
<select ng-model="selected" ng-options="opt as opt.language for opt in tableResult.locales"></select>
<p>You have selected {{ selected.language }}</p>
<p>You havd id too! {{ selected.localeId }}</p>
<p>
</p>
<input type="text" value="{{selected.localeId}} : {{selected.language}}" style="width:50%;"/>
</div>