Angular js Comment remplir liste déroulante avec JSON sans ng-options
je remplir déroulant de cette façon, et les données sont à venir, mais aucune donnée n'a été sélectionné lors de l'déroulant apparaît en premier temps. voici mon code. s'il vous plaît avoir un coup d'oeil et me dire où j'ai fait l'erreur.
<div ng-controller="DemoCtrl" ng-app="main">
<select ng-model="selectedCountry">
<option value="">Select Account</option>
<option ng-repeat="item in chooseCountries" value="item.countryId">
{{item.countryId}}-{{item.name}}
</option>
</select>
<span>Selected country id is {{selectedCountry.countryId}}</span>
</div>
var app = angular.module('main', []);
app.controller('DemoCtrl', function ($scope) {
$scope.chooseCountries=[
{countryId : 1, name : "France - Mainland", desc: "some description" },
{countryId : 2, name : "Gibraltar", desc: "some description"},
{countryId : 3, name : "Malta", desc: "some description"}
];
$scope.selectedCountry = $scope.chooseCountries[0].countryId;
});
ngValue
pasvalue
Vous devez vous connecter pour publier un commentaire.
Plus meilleure façon d'aller de l'usage de
ng-options
directive.Démo ici
Pourquoi
ng-repeat
approche ne fonctionne pas?(Juste pour l'explication, ne recommande pas d'utiliser)Vous devez remplir l'option
value
attribut aveccountryId
correctement commevalue="{{item.countryId}}"
Mais ci-dessus ne fonctionnera pas pour votre cas parce que vous avez eu
countryId
champ est dans le format de nombre, quandoption
affecter cette valeur àvalue
attribut, il est converti enstring
format. Donc sur de chargement initial, vous ne les verrez pascountryId
obtient liées à la boîte de sélection. la comparaison se fera comme2==="2"
ne serait pastrue
, afin de sélectionner la zone ne serait pas sélectionner une valeur, même si vous avez fourni dansng-model
.Vous pouvez trouver le problème plunkr ici
Donc pour la fixation, il faut les convertir
number
de la valeur àstring
valeur en appelanttoString
méthode dessus comme ci-dessousEn faisant au-dessus de changement de zone de sélection ne sélectionnez fourni
countryId
valeur dans la liste déroulante car de la comparaison vrai"2"==="2"
C'est pourquoi l'utilisation de ng-options serait mieux, ce qui ne conserver de la valeur
datatype
. Fondamentalement, ils ont travaillé sans mal les types de données de la valeur.http://plnkr.co/edit/evQJAKvMnl4btz4BZeuP?p=preview
ng-repeat
partie ne fonctionne pas.. et ne +1 si vous le pouvez :pconsulter:https://docs.angularjs.org/api/ng/directive/ngOptions
Vous devez utiliser ng-options comme suit
country.countryId as country.name for country in chooseCountries
pourquoi ne peut-on pas écrire commecountry.countryId,country.name for country in chooseCountries
?for array data sources: label for value in array, select as label for value in array, label group by group for value in array, label disable when disable for value in array, label group by group for value in array track by trackexpr, label disable when disable for value in array track by trackexpr, label for value in array | orderBy:orderexpr track by trackexpr (for including a filter with track by)