Je peux définir une liste déroulante avec une valeur par défaut dans angularjs,
<select name="repeatSelect" id="repeatSelect" ng-model="repeatSelect" ng-init=" repeatSelect = data[0].id">
<option ng-repeat="option in data" value="{{option.id}}">{{option.name}}</option>
</select>
Comment puis-je obtenir le même résultat avec ng-options
? Je treid avec,
<select name="repeatSelect"
id="repeatSelect"
ng-model="repeatSelect"
ng-init=" repeatSelect = option.id"
ng-options="option.name for option in data track by option.id">
</select>
Mais pas d'utilisation. Échantillon le violon est ici
Utilisez ng-init
pour définir la valeur par défaut de ng-options
.
Voici le: demo
<select name="repeatSelect"
id="repeatSelect"
ng-model="repeatSelect"
ng-init=" repeatSelect = data[0].id"
ng-options="option.id as option.name for option in data">
</select>
Tout cela manque l'utilisation de ng-init
.
De la documentation angulaire:
Cette directive peut être utilisée pour ajouter des quantités inutiles de logique dans vos modèles. Il n'y a que quelques utilisations appropriées de ngInit, comme pour le repliement de propriétés spéciales de ngRepeat, comme le montre la démonstration ci-dessous; et pour injecter des données via un script côté serveur. Outre ces quelques cas, vous devez utiliser des contrôleurs plutôt que ngInit pour initialiser les valeurs sur une étendue.
À mon avis, la manière correcte de définir une valeur par défaut consiste simplement à pré-remplir votre propriété ng-model
avec la valeur sélectionnée dans votre ng-options
, angular faisant le reste.
Essentiellement, lorsque vous définissez la propriété $scope
, votre sélection sera liée pour lui attribuer la valeur par défaut de votre tableau data
. Si votre tableau data
provient d'une requête ajax, affectez-le simplement une fois que vous avez la data
.
.controller('test', ['$scope', function ($scope) {
$scope.data = [{name: 'one', id: 1}, {name: 'two', id: 2},{name: 'three', id: 3}];
$scope.repeatSelect= $scope.data[0];
}]);
Il y a une mise en garde à noter. Si vous utilisez la clé as
Word dans votre expression, vous devez attribuer votre ng-model
à la propriété réelle que vous lui indiquez de sélectionner.
Voir le violon complet en démonstration à la fois: http://jsfiddle.net/kb99gee8/
j'ai réalisé ce dont vous avez besoin en utilisant votre code et ng-options
comme vous l'avez mentionné, voici Working Fiddle
CODE complet
<div ng-app="ngrepeatSelect">
<div ng-controller="ExampleController">
<form name="myForm">
<label for="repeatSelect">Angular select:</label>
<select name="repeatSelect"
id="repeatSelect"
ng-model="repeatSelect"
ng-init=" repeatSelect = data[0]"
ng-options="option.name for option in data track by option.id">
</select>
</form>
<br/> <tt>Selected value: {{repeatSelect.id}}</tt>
</div>
</div>
<br/>
Je vais suggérer un exemple Partie HTML
<select class="form-control" ng-model="data.selectedOption" required ng-options="option.name as option.name for option in venueNamelists" ng-change="getmediationRooms(data.selectedOption)"></select>
Dans mon contrôleur
$ scope.data = {selectedOption: $ scope.venueNamelists [i] .name};
la valeur du modèle doit être égale à la paire clé/valeur dans les sitesamelistes.