150 votes

Comment utiliser ng-option pour définir la valeur par défaut d'un élément de sélection ?

J'ai vu la documentation de la directive select d'Angular ici : http://docs.angularjs.org/api/ng.directive:select . Je n'arrive pas à trouver comment définir la valeur par défaut. C'est déroutant :

sélectionner comme étiquette pour une valeur dans un tableau

Voici l'objet :

{
    "type": "select", 
    "name": "Service",
    "value": "Service 3", 
    "values": [ "Service 1", "Service 2", "Service 3", "Service 4"] 
}

Le html (travail) :

<select><option ng-repeat="value in prop.values">{{value}}</option></select>

puis j'essaie d'ajouter un attribut ng-option à l'intérieur de l'élément de sélection pour définir prop.value comme option par défaut (ne fonctionne pas).

ng-options="(prop.value) for v in prop.values"

Qu'est-ce que je fais mal ?

10voto

Coronellx Points 93

J'ai lutté avec cela pendant quelques heures, donc je voudrais ajouter quelques clarifications pour cela, tous les exemples notés ici, se réfère à des cas où les données sont chargées à partir du script lui-même, pas quelque chose venant d'un service ou d'une base de données, donc je voudrais fournir mon expérience pour toute personne ayant le même problème que moi.

Normalement, vous enregistrez seulement l'id de l'option désirée dans votre base de données, alors... montrons-le

service.js

myApp.factory('Models', function($http) {
var models = {};
models.allModels = function(options) {
    return $http.post(url_service, {options: options});
};

return models;
});

controller.js

myApp.controller('exampleController', function($scope, Models) {
$scope.mainObj={id_main: 1, id_model: 101};
$scope.selected_model = $scope.mainObj.id_model;
Models.allModels({}).success(function(data) {
    $scope.models = data; 
});
});

Enfin, le html partiel modèle.html

Model: <select ng-model="selected_model" 
ng-options="model.id_model as model.name for model in models" ></select>

En fait, je voulais souligner que cette pièce " model.id_model as model.name for model in models " le " modèle.id_modèle "utilise l'identifiant du modèle pour la valeur afin que vous puissiez le faire correspondre avec la méthode " mainObj.id_model "qui est aussi le " modèle_sélectionné ", il s'agit juste d'une valeur ordinaire, de même que " comme model.name "est l'étiquette pour le répéteur, enfin " modèle dans modèles " est juste le cycle régulier que nous connaissons tous.

J'espère que cela aidera quelqu'un, et si c'est le cas, merci de voter en faveur du projet :D

1 votes

Vous pourriez simplement lier la sélection à mainObj.id_model directement ( ng-model="mainObj.id_model" ), plutôt que d'utiliser une variable "placeholder / plain value". selected_model

0 votes

Oui, en effet, je voulais juste montrer que cela pouvait être fait avec une valeur directement dans le $scope, mais merci de l'avoir souligné.

0 votes

Est-il possible de se lier à un objet et pas seulement à un int ? Je n'arrive pas à faire en sorte que mon nGoptions définisse son élément sélectionné car il ne sait pas comment lier mon {id:24} à mon [{id:23},{id:24},{id:25}].

10voto

Surya R Praveen Points 69
<select id="itemDescFormId" name="itemDescFormId" size="1" ng-model="prop" ng-change="update()">
    <option value="">English(EN)</option>
    <option value="23">Corsican(CO)</option>
    <option value="43">French(FR)</option>
    <option value="16">German(GR)</option>

Il suffit d'ajouter une option avec une valeur vide. Cela fonctionnera.

Plnkr DEMO

0 votes

Cela fonctionne vraiment si vous ajoutez quelque chose comme <option value="" disabled>Please Select</option>

9voto

WMios Points 1361

Une façon plus simple de le faire est d'utiliser data-ng-init comme ça :

<select data-ng-init="somethingHere = options[0]" data-ng-model="somethingHere" data-ng-options="option.name for option in options"></select>

La principale différence ici est que vous devrez inclure data-ng-model

3 votes

Comme spécifié dans les docs : La seule utilisation appropriée de ngInit est pour aliaser des propriétés spéciales de ngRepeat, comme vu dans la démo ci-dessous. En dehors de ce cas, vous devriez utiliser des contrôleurs plutôt que ngInit pour initialiser des valeurs sur une portée.

1 votes

La façon dont j'ai posté, avec des ng-options est beaucoup plus facile et plus concrète. Les deux méthodes fonctionnent.

3voto

David Douglas Points 1410

El ng-model définit l'option sélectionnée et vous permet également de mettre en place un filtre tel que orderBy:orderModel.value

index.html

<select ng-model="orderModel" ng-options="option.name for option in orderOptions"></select>

controllers.js

$scope.orderOptions = [
    {"name":"Newest","value":"age"},
    {"name":"Alphabetical","value":"name"}
];

$scope.orderModel = $scope.orderOptions[0];

1 votes

J'essaie et je vois angular.js:117 TypeError: a.forEach is not a function . Des idées ?

1voto

code_maestro Points 21

Si quelqu'un rencontre le problème de la valeur par défaut qui n'est parfois pas remplie sur la page dans Chrome, IE 10/11, Firefox, essayez d'ajouter cet attribut à votre champ de saisie/sélection pour vérifier la variable remplie dans le HTML, comme suit :

<input data-ng-model="vm.x" data-ng-if="vm.x !== '' && vm.x !== undefined && vm.x !== null" />

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X