У меня проблемы с выбранной и вашей моделью. В этом примере 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"},…]
Вероятно, значение модели не получает знания, и 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);
});
};
Попробуйте передать функцию 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);
});
};
Надеюсь, поможет.