J'utilise Angular JS et je dois définir une option sélectionnée d'un contrôle de liste déroulante à l'aide de JS angulaire. Pardonne-moi si c'est ridicule mais je suis nouveau avec Angular JS
Voici le contrôle de la liste déroulante de mon HTML
<select ng-required="item.id==8 && item.quantity > 0" name="posterVariants"
ng-show="item.id==8" ng-model="item.selectedVariant"
ng-change="calculateServicesSubTotal(item)"
ng-options="v.name for v in variants | filter:{type:2}">
</select>
Après il est peuplé je reçois
<select ng-options="v.name for v in variants | filter:{type:2}" ng-change="calculateServicesSubTotal(item)"
ng-model="item.selectedVariant" ng-show="item.id==8" name="posterVariants"
ng-required="item.id==8 && item.quantity > 0" class="ng-pristine ng-valid ng-valid-required">
<option value="?" selected="selected"></option>
<option value="0">set of 6 traits</option>
<option value="1">5 complete sets</option>
</select>
Comment définir le contrôle pour que value="0"
soit sélectionné?
J'espère que je comprends votre question, mais la directive ng-model
crée une liaison bidirectionnelle entre l'élément sélectionné dans le contrôle et la valeur de item.selectedVariant
. Cela signifie que la modification de item.selectedVariant
en JavaScript ou la modification de la valeur dans le contrôle met à jour l'autre. Si item.selectedVariant
a la valeur 0
, cet élément doit être sélectionné.
Si variants
est un tableau d'objets, item.selectedVariant
doit être défini sur l'un de ces objets. Je ne sais pas quelles informations vous avez dans votre champ, mais voici un exemple:
JS:
$scope.options = [{ name: "a", id: 1 }, { name: "b", id: 2 }];
$scope.selectedOption = $scope.options[1];
HTML:
<select data-ng-options="o.name for o in options" data-ng-model="selectedOption"></select>
Cela laisserait l'élément "b" à sélectionner.
Je ne sais pas si cela aidera quelqu'un ou non, mais comme je faisais face au même problème, j'ai pensé partager comment j'avais la solution.
Vous pouvez utiliser track by attribute dans votre ng-options
.
Supposons que vous avez:
variants:[{'id':0, name:'set of 6 traits'}, {'id':1, name:'5 complete sets'}]
Vous pouvez mentionner votre ng-options
comme:
ng-options="v.name for v in variants track by v.id"
J'espère que cela aidera quelqu'un à l'avenir.
Si vous attribuez la valeur 0 à item.selectedVariant
, il doit être sélectionné automatiquement . Extrait de l'exemple sur http://docs.angularjs.org/api/ng.directive:select qui sélectionne la couleur rouge par défaut en affectant simplement $scope.color='red'
.
je vois ici déjà écrit de bonnes réponses, mais parfois écrire la même chose sous une autre forme peut être utile
<div ng-app ng-controller="MyCtrl">
<select ng-model="referral.organization" ng-options="c for c in organizations"></select>
</div>
<script type='text/javascript'>
function MyCtrl($scope) {
$scope.organizations = ['a', 'b', 'c', 'd', 'e'];
$scope.referral = {
organization: $scope.organizations[2]
};
}
</script>
Cela peut être utile. Les dosages ne fonctionnent pas toujours.
<select id="product" class="form-control" name="product" required
ng-model="issue.productId"
ng-change="getProductVersions()"
ng-options="p.id as p.shortName for p in products"></select>
Par exemple. Vous remplissez le modèle source de liste d'options à partir de rest-service. La valeur sélectionnée était connue avant la liste de remplissage et a été définie. Après avoir exécuté rest-request avec l'option $ http list, faites-le. Mais l'option sélectionnée n'est pas définie. Pour des raisons inconnues, AngularJS dans shadow $ digest n’exécutant pas la liaison comme il se doit. Je dois utiliser JQuery pour définir sélectionné. C'est important! Angular in shadow ajoute le préfixe à la valeur attr "valeur" générée par les optinos ng-repeat. Pour int c'est "numéro:".
$scope.issue.productId = productId;
function activate() {
$http.get('/product/list')
.then(function (response) {
$scope.products = response.data;
if (productId) {
console.log("" + $("#product option").length);//for clarity
$timeout(function () {
console.log("" + $("#product option").length);//for clarity
$('#product').val('number:'+productId);
//$scope.issue.productId = productId;//not work at all
}, 200);
}
});
}
Si vous avez une réponse Users ou un Array/JSON que vous avez défini, vous devez d'abord définir la valeur sélectionnée dans le contrôleur, puis vous inscrivez le même nom de modèle en HTML. Cet exemple, j'ai écrit pour expliquer de la manière la plus simple.
Exemple simple
Contrôleur intérieur:
$scope.Users = ["Suresh","Mahesh","Ramesh"];
$scope.selectedUser = $scope.Users[0];
Votre HTML
<select data-ng-options="usr for usr in Users" data-ng-model="selectedUser">
</select>
exemple complexe
Contrôleur intérieur:
$scope.JSON = {
"ResponseObject":
[{
"Name": "Suresh",
"userID": 1
},
{
"Name": "Mahesh",
"userID": 2
}]
};
$scope.selectedUser = $scope.JSON.ResponseObject[0];
Votre HTML
<select data-ng-options="usr.Name for usr in JSON.ResponseObject" data-ng-model="selectedUser"></select>
<h3>You selected: {{selectedUser.Name}}</h3>
Essayez ce qui suit:
Fichier JS
this.options = {
languages: [{language: 'English', lg:'en'}, {language:'German', lg:'de'}]
};
console.log(signinDetails.language);
Fichier HTML
<div class="form-group col-sm-6">
<label>Preferred language</label>
<select class="form-control" name="right" ng-model="signinDetails.language" ng-init="signinDetails.language = options.languages[0]" ng-options="l as l.language for l in options.languages"><option></option>
</select>
</div>