Выберите не связывать с моделью

0

У меня проблемы с выбранной и вашей моделью. В этом примере usaStates - это массив объектов, который хранится в корневой области.

<label>State:</label>
<select name="state" ng-model="selectedState" ng-options="state.name for state in usaStates" required ng-change="getCities()">
    <option>Select a state</option>
</select>

Итак, в моем контроллере у меня есть:

$scope.selectedState = null;
$scope.getCities = function()
{
   console.log($scope.selectedState);
   var stateCode = $scope.selectedState.id;
   MainService.getCities(stateCode)
   .then(function(httpData){
      $scope.cities = httpData.data;
   })
   .catch(function(error){
      console.log(error);
   });
};

Когда выбрано состояние, функция getCities запускается, но $scope.selectedState имеет значение NULL. У меня этот код в другом представлении и отлично работает. Почему здесь нет? Есть идеи?

UPDATE Мой источник состояния:

[{id: "AL", name: "Alabama"}, {id: "AK", name: "Alaska"}, {id: "AZ", name: "Arizona"},…]
Теги:
combobox
angular-ngmodel

2 ответа

0

Вероятно, значение модели не получает знания, и ng-change увольняется раньше.

Вы можете передать его как параметр.

<select name="state" ng-model="selectedState" ng-options="state.name for state in usaStates" required ng-change="getCities(selectedState)">
    <option>Select a state</option>
</select>

В контроллере.

$scope.selectedState = null;
$scope.getCities = function(selectedState)
{
   console.log(selectedState);
   var stateCode = selectedState.id;
   MainService.getCities(stateCode)
   .then(function(httpData){
      $scope.cities = httpData.data;
   })
   .catch(function(error){
      console.log(error);
   });
};
  • 0
    Спасибо, но результат тот же.
0

Попробуйте передать функцию selectedState в getCities(selectedState).

Например

HTML

<select name="state"
        ng-model="selectedState" 
        ng-options="state.name for state in usaStates" 
        ng-change="getCities(selectedState)"
        required="required">
    <option>Select a state</option>
</select>

JS

$scope.selectedState = null;
$scope.getCities = function(selectedState) {
    $scope.selectedState = selectedState;
    console.log($scope.selectedState);
    var stateCode = $scope.selectedState.id;
    MainService.getCities(stateCode)
            .then(function(httpData) {
                $scope.cities = httpData.data;
            })
            .catch(function(error) {
                console.log(error);
            });
};

Надеюсь, поможет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню