J'ai effectué une recherche sur Google et je ne trouve rien à ce sujet.
J'ai ce code.
<select ng-model="somethingHere"
ng-options="option.value as option.name for option in options"
></select>
Avec des données comme celle-ci
options = [{
name: 'Something Cool',
value: 'something-cool-value'
}, {
name: 'Something Else',
value: 'something-else-value'
}];
Et la sortie est quelque chose comme ça.
<select ng-model="somethingHere"
ng-options="option.value as option.name for option in options"
class="ng-pristine ng-valid">
<option value="?" selected="selected"></option>
<option value="0">Something Cool</option>
<option value="1">Something Else</option>
</select>
Comment est-il possible de définir la première option dans les données comme valeur par défaut pour obtenir un résultat comme celui-ci.
<select ng-model="somethingHere" ....>
<option value="0" selected="selected">Something Cool</option>
<option value="1">Something Else</option>
</select>
Vous pouvez simplement utiliser ng-init comme ceci
<select ng-init="somethingHere = options[0]"
ng-model="somethingHere"
ng-options="option.name for option in options">
</select>
Si vous voulez vous assurer que votre valeur $scope.somethingHere
ne sera pas écrasée lors de l'initialisation de votre vue, vous voudrez fusionner (somethingHere = somethingHere || options[0].value
) la valeur dans votre ng-init comme suit:
<select ng-model="somethingHere"
ng-init="somethingHere = somethingHere || options[0].value"
ng-options="option.value as option.name for option in options">
</select>
Essaye ça:
HTML
<select
ng-model="selectedOption"
ng-options="option.name for option in options">
</select>
Javascript
function Ctrl($scope) {
$scope.options = [
{
name: 'Something Cool',
value: 'something-cool-value'
},
{
name: 'Something Else',
value: 'something-else-value'
}
];
$scope.selectedOption = $scope.options[0];
}
Plunker ici .
Si vous voulez vraiment définir la valeur qui sera liée au modèle, remplacez l'attribut ng-options
par
ng-options="option.value as option.name for option in options"
et le Javascript pour
...
$scope.selectedOption = $scope.options[0].value;
Un autre Plunker ici compte tenu de ce qui précède.
Un seul réponse de Srivathsa Harish Venkataramana mentionné track by
qui est en effet une solution pour cela!
Voici un exemple avec Plunker (lien ci-dessous) de l'utilisation de track by
dans selectng-options
:
<select ng-model="selectedCity"
ng-options="city as city.name for city in cities track by city.id">
<option value="">-- Select City --</option>
</select>
Si selectedCity
est défini sur l'étendue angulaire et qu'il a la propriété id
avec la même valeur que toute id
de toute city
de la liste cities
, elle sera automatiquement sélectionnée au chargement.
Voici Plunker pour cela: http://plnkr.co/edit/1EVs7R20pCffewrG0EmI?p=preview
Voir la documentation source pour plus de détails: https://code.angularjs.org/1.3.15/docs/api/ng/directive/select
Je pense que, après l'inclusion de 'track by', vous pouvez l'utiliser dans ng-options pour obtenir ce que vous vouliez, comme suit
<select ng-model="somethingHere" ng-options="option.name for option in options track by option.value" ></select>
Cette façon de faire est préférable car lorsque vous souhaitez remplacer la liste de chaînes par une liste d’objets, vous devez simplement changer ceci.
<select ng-model="somethingHere" ng-options="object.name for option in options track by object.id" ></select>
où quelque chose est un objet avec les propriétés name et id, bien sûr. Veuillez noter que 'as' n'est pas utilisé de cette manière pour exprimer les options-ng, car il ne fera que définir la valeur et vous ne pourrez pas le modifier lorsque vous utilisez le suivi
La réponse acceptée utilise ng-init
, mais document dit d'éviter si possible ng-init.
La seule utilisation appropriée de ngInit concerne l'aliasing de propriétés spéciales de ngRepeat, comme vu dans la démo ci-dessous. Outre ce cas, vous devriez utilisez les contrôleurs plutôt que ngInit pour initialiser les valeurs sur une étendue.
Vous pouvez également utiliser ng-repeat
au lieu de ng-options
pour vos options. Avec ng-repeat
, vous pouvez utiliser ng-selected
avec ng-repeat
propriétés spéciales. c'est-à-dire $ index, $ odd, $ même pour que cela fonctionne sans codage.
$first
est l’une des propriétés spéciales de ng-repeat.
<select ng-model="foo">
<option ng-selected="$first" ng-repeat="(id,value) in myOptions" value="{{id}}">
{{value}}
</option>
</select>
---------------------- MODIFIER ----------------
Bien que cela fonctionne, je préférerais la réponse de @ mik-t lorsque vous savez quelle valeur sélectionner, https://stackoverflow.com/a/29564802/454252 , qui utilise track-by
et ng-options
sans utiliser ng-init
ou ng-repeat
.
Cette réponse ne doit être utilisée que lorsque vous devez sélectionner le premier élément sans savoir quelle valeur choisir. Je l'utilise par exemple pour l'achèvement automatique, ce qui nécessite de choisir le PREMIER élément à tout moment.
Ma solution à cela était d'utiliser HTML pour coder en dur mon option par défaut. Ainsi:
En HAML:
%select{'ng-model' => 'province', 'ng-options' => "province as province for province in summary.provinces", 'chosen' => "chosen-select", 'data-placeholder' => "BC & ON"}
%option{:value => "", :selected => "selected"}
BC & ON
En HTML:
<select ng-model="province" ng-options="province as province for province in summary.provinces" chosen="chosen-select" data-placeholder="BC & ON">
<option value="" selected="selected">BC & ON</option>
</select>
Je veux que mon option par défaut renvoie toutes les valeurs de mon API, c'est pourquoi j'ai une valeur vide. Excusez aussi mon haml. Je sais que ce n'est pas directement une réponse à la question du PO, mais les gens le trouvent sur Google. J'espère que ceci aide quelqu'un d'autre.
Utilisez le code ci-dessous pour renseigner l'option sélectionnée dans votre modèle.
<select id="roomForListing" ng-model="selectedRoom.roomName" >
<option ng-repeat="room in roomList" title="{{room.roomName}}" ng-selected="{{room.roomName == selectedRoom.roomName}}" value="{{room.roomName}}">{{room.roomName}}</option>
</select>
Dans mon cas, il me fallait insérer une valeur initiale uniquement pour indiquer à l'utilisateur de sélectionner une option, j'aime bien le code ci-dessous:
<select ...
<option value="" ng-selected="selected">Select one option</option>
</select>
Lorsque j'ai essayé une option avec la valeur! = D'une chaîne vide (null), l'option a été remplacée par angular, mais lorsque vous avez placé une option comme celle-ci (avec une valeur null), la sélection a été sélectionnée avec cette option.
Désolé par mon mauvais anglais et j'espère que je l'aide dans quelque chose avec cela.
Selon le nombre d'options que vous avez, vous pouvez placer vos valeurs dans un tableau et les renseigner automatiquement
<select ng-model="somethingHere.values" ng-options="values for values in [5,4,3,2,1]">
<option value="">Pick a Number</option>
</select>
select
avec ngOptions
et définir une valeur par défaut:Reportez-vous à la documentation ngOptions pour plus d'exemples d'utilisation de ngOptions
.
angular.module('defaultValueSelect', [])
.controller('ExampleController', ['$scope', function($scope) {
$scope.data = {
availableOptions: [
{id: '1', name: 'Option A'},
{id: '2', name: 'Option B'},
{id: '3', name: 'Option C'}
],
selectedOption: {id: '2', name: 'Option B'} //This sets the default value of the select in the ui
};
}]);
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.0-rc.0/angular.min.js"></script>
<body ng-app="defaultValueSelect">
<div ng-controller="ExampleController">
<form name="myForm">
<label for="mySelect">Make a choice:</label>
<select name="mySelect" id="mySelect"
ng-options="option.name for option in data.availableOptions track by option.id"
ng-model="data.selectedOption"></select>
</form>
<hr>
<tt>option = {{data.selectedOption}}</tt><br/>
</div>
Documentation officielle à propos de l'élément HTML SELECT
avec liaison de données angulaire.
select
à une valeur autre que de chaîne via ngModel
à analyser/formater:(function(angular) {
'use strict';
angular.module('nonStringSelect', [])
.run(function($rootScope) {
$rootScope.model = { id: 2 };
})
.directive('convertToNumber', function() {
return {
require: 'ngModel',
link: function(scope, element, attrs, ngModel) {
ngModel.$parsers.Push(function(val) {
return parseInt(val, 10);
});
ngModel.$formatters.Push(function(val) {
return '' + val;
});
}
};
});
})(window.angular);
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.0-rc.1/angular.min.js"></script>
<body ng-app="nonStringSelect">
<select ng-model="model.id" convert-to-number>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
{{ model }}
</body>
angular.module('defaultValueSelect', [])
.controller('ExampleController', ['$scope', function($scope) {
$scope.availableOptions = [
{ name: 'Apple', value: 'Apple' },
{ name: 'Banana', value: 'banana' },
{ name: 'Kiwi', value: 'kiwi' }
];
$scope.data = {selectedOption : $scope.availableOptions[1].value};
}]);
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.0-rc.0/angular.min.js"></script>
<body ng-app="defaultValueSelect">
<div ng-controller="ExampleController">
<form name="myForm">
<select ng-model="data.selectedOption" required ng-options="option.value as option.name for option in availableOptions"></select>
</form>
</div>
</body>
Cela a fonctionné pour moi.
<select ng-model="somethingHere" ng-init="somethingHere='Cool'">
<option value="Cool">Something Cool</option>
<option value="Else">Something Else</option>
</select>
En réponse à la réponse de Ben Lesh , il devrait y avoir cette ligne
ng-init="somethingHere = somethingHere || options[0]"
au lieu de
ng-init="somethingHere = somethingHere || options[0].value"
C'est,
<select ng-model="somethingHere"
ng-init="somethingHere = somethingHere || options[0]"
ng-options="option.name for option in options track by option.value">
</select>
Dans mon cas puisque la valeur par défaut varie d’un cas à l’autre sous la forme ..__, j’ajoute un attribut personnalisé dans la balise select.
<select setSeletected="{{data.value}}">
<option value="value1"> value1....
<option value="value2"> value2....
......
dans les directives, j'ai créé un script qui vérifie la valeur et, lorsque angular le remplit, définit l'option avec cette valeur sur selected.
.directive('setSelected', function(){
restrict: 'A',
link: (scope, element, attrs){
function setSel=(){
//test if the value is defined if not try again if so run the command
if (typeof attrs.setSelected=='undefined'){
window.setTimeout( function(){setSel()},300)
}else{
element.find('[value="'+attrs.setSelected+'"]').prop('selected',true);
}
}
}
setSel()
})
je viens de traduire cela à partir de coffescript à la volée. Au moins, le jist de celui-ci est correct, sinon le trou.
Ce n'est pas le moyen le plus simple, mais faites-le quand la valeur varie
Utilisez simplement ng-selected="true"
comme suit:
<select ng-model="myModel">
<option value="a" ng-selected="true">A</option>
<option value="b">B</option>
</select>
Je définirais le modèle dans le contrôleur. Ensuite, la sélection passera par défaut à cette valeur. Ex: Html:
<select ng-options="..." ng-model="selectedItem">
Contrôleur angulaire (en utilisant la ressource):
myResource.items(function(items){
$scope.items=items;
if(items.length>0){
$scope.selectedItem= items[0];
//if you want the first. Could be from config whatever
}
});
Si vous utilisez ng-options
pour vous rendre dans le menu déroulant, option
ayant la même valeur que celle de ng-modal est sélectionné par défaut . Prenons l'exemple:
<select ng-options="list.key as list.name for list in lists track by list.id" ng-model="selectedItem">
Donc, l'option ayant la même valeur que list.key
et selectedItem
est sélectionnée par défaut.
Si vous avez quelque chose au lieu d'initier simplement la partie date, vous pouvez utiliser ng-init()
en le déclarant dans votre contrôleur, et l'utiliser en haut de votre code HTML . Cette fonction fonctionnera comme un constructeur pour votre contrôleur, et vous peut initier vos variables là-bas.
angular.module('myApp', [])
.controller('myController', ['$scope', ($scope) => {
$scope.allOptions = [
{ name: 'Apple', value: 'Apple' },
{ name: 'Banana', value: 'banana' }
];
$scope.myInit = () => {
$scope.userSelected = 'Apple'
// Other initiations can goes here..
}
}]);
<body ng-app="myApp">
<div ng-controller="myController" ng-init="init()">
<select ng-model="userSelected" ng-options="option.value as option.name for option in allOptions"></select>
</div>
</body>
Cela fonctionne pour moi
ng-selected="true"
essayez ceci dans votre contrôleur angulaire ...
$ quelque choseHere = {name: 'Quelque chose de cool'};
Vous pouvez définir une valeur, mais vous utilisez un type complexe et l’angle cherchera clé/valeur à définir dans votre vue.
Et, si cela ne fonctionne pas, essayez ceci:
J'avais besoin de la valeur par défaut «Please Select» pour être non sélectionnable. Je devais également pouvoir définir de manière conditionnelle une option sélectionnée par défaut.
J'ai réalisé ceci de la manière simpliste suivante: Code JS: // Retournez ces 2 pour tester les valeurs par défaut sélectionnées ou aucune valeur par défaut avec le texte par défaut «Veuillez sélectionner». //$scope.defaultOption = 0; $ scope.defaultOption = {clé: '3', valeur: 'Option 3'};
$scope.options = [
{ key: '1', value: 'Option 1' },
{ key: '2', value: 'Option 2' },
{ key: '3', value: 'Option 3' },
{ key: '4', value: 'Option 4' }
];
getOptions();
function getOptions(){
if ($scope.defaultOption != 0)
{ $scope.options.selectedOption = $scope.defaultOption; }
}
HTML:
<select name="OptionSelect" id="OptionSelect" ng-model="options.selectedOption" ng-options="item.value for item in options track by item.key">
<option value="" disabled selected style="display: none;"> -- Please Select -- </option>
</select>
<h1>You selected: {{options.selectedOption.key}}</h1>
J'espère que cela aide quelqu'un d'autre qui a des exigences similaires.
Le "Please Select" a été accompli par la réponse de Joffrey Outtier ici .
<!--
Using following solution you can set initial
default value at controller as well as after change option selected value shown as default.
-->
<script type="text/javascript">
function myCtrl($scope)
{
//...
$scope.myModel=Initial Default Value; //set default value as required
//..
}
</script>
<select ng-model="myModel"
ng-init="myModel= myModel"
ng-options="option.value as option.name for option in options">
</select>