我以这种方式填充下拉并且数据即将到来,但是在第一次显示下拉列表时没有选择任何数据。这是我的代码。请看看我告诉我哪里弄错了。
<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;
});
答案 0 :(得分:2)
更好的方法是使用ng-options
指令。
<select ng-model="selectedCountry"
ng-options="country.countryId as (country.name+'-'+country.desc) for country in chooseCountries">
</select>
ng-repeat
方法不起作用?(仅供解释,不建议使用)您应该使用value
正确填写选项countryId
属性,例如value="{{item.countryId}}"
<select ng-model="selectedCountry">
<option value="">Select Account</option>
<option ng-repeat="item in chooseCountries" value="{{item.countryId}}">
{{item.countryId}}-{{item.name}}
</option>
</select>
但上述内容不适用于您的情况,因为您的countryId
字段采用数字格式,当option
将该值分配给value
属性时,它会转换为string
格式。因此,在初始加载时,您不会看到countryId
被绑定到选择框。将会发生2==="2"
不会true
的比较,因此即使您在ng-model
中提供了选择框,也不会选择值。
您可以找到问题plunkr here
因此,要修复它,您需要通过调用number
方法将string
值转换为toString
值,如下所示
$scope.selectedCountry = $scope.chooseCountries[0].countryId.toString();
通过执行上述更改选择框确实在下拉列表中选择了提供的countryId
值,因为比较发生为真"2"==="2"
这就是为什么使用ng-options会更好,这确实保留了值datatype
。基本上他们在没有损害数据类型的情况下工作。
答案 1 :(得分:2)
<select ng-options="country as country.countryId+ ' (' + country.name + ')' for country in chooseCountries ng-model="selectedCountry "></select>
答案 2 :(得分:0)
您应该使用ng-options,如下所示
<select ng-model="selectedCountry" ng-options="country.countryId as country.name for country in chooseCountries"></select>