2015-12-11 4 views
1

У меня проблема с настройкой по умолчанию для моего списка выбора. Любая помощь по этому поводу будет оценена по достоинству. Я посмотрел на другие подобные должности, но решения, похоже, не работают в моем случае.angular js select default value not working

Я заполняю $ scope.series в контроллере. а затем выпадающее меню также заполняется, но оно не устанавливает значение по умолчанию.

<select name="repeatSelect" id="repeatSelect" 
          ng-init="selectedItem = series[0].code" 
          ng-model="selectedItem" 
          ng-options="serie.name for serie in series track by serie.code" 
          ng-change="update()"></select> 

вот JSON:

[ 
    { 
     "code": "code1", 
     "name": "name 1", 
    }, 
    { 
     "code": "code2", 
     "name": "name 2", 
    } 
] 

После является контроллером

angular.module("myApp", []) 
.controller('myController', function ($scope, dataService) { 
    dataService.getSeries(function (response) { 
     $scope.series = response.data; 
     console.log(response.data); 
    })}); 

Где DATASERVICE это услуга, чтобы получить JSon файл из $ HTTP GET.

+0

Это считается [плохой практикой использования ngInit] (https://docs.angularjs.org/api/ng/directive/ngInit) таким образом. Просто установите значение в контроллере. Это также может решить вашу проблему. –

+1

BTW, также не инициализируйте выбранный код серийным [0] .code, а серией [0], так как это то, что содержится в ng-модели. –

ответ

1

У вас был ng-init, который пытается оценить выражение, когда в series не было значения, потому что ajax для него еще не возвращает значение.

Таким образом, вы должны установить значение ng-model в Ajax успеха вместо ng-init

Markup

<select name="repeatSelect" id="repeatSelect" 
    ng-model="selectedItem" 
    ng-options="serie.name for serie in series" 
    ng-change="update()"> 
</select> 

Код

angular.module("myApp", []) 
.controller('myController', function ($scope, dataService) { 
    dataService.getSeries(function (response) { 
     $scope.series = response.data; 
     $scope.selectedItem = $scope.series[0].code; //setting ng-model after getting data 
     console.log(response.data); 
    }); 
}); 
0

кажется, добавив этот код в контроллер сделал трюк и не нужно иметь ng-init. :

$scope.selectedItem = { code: $scope.series[0].code, name: $scope.series.name };