#javascript #angularjs #angularjs-controller #angular-ngmodel
#javascript #angularjs #angularjs-контроллер #angular-ngmodel
Вопрос:
Я пытаюсь получить значение текущего параметра a select
, но оно возвращает мне неопределенное значение (я ожидаю, что оно вернет мне объект).
Разметка:
<div ng-app ng-controller="MyCtrl">
<select ng-model="selectedLocal" ng-options="item.Nome for item in locais" ng-change="localSelectChange()">
<option value="">Locais</option>
</select>
</div>
Контроллер:
function MyCtrl($scope) {
$scope.locais = [{
ID: 109,
Nome: 'Aeroporto Internacional Hercilio Luz'
}, {
ID: 161,
Nome: 'Koxixos'
}, {
ID: 184,
Nome: 'Praça XV de Novembro'
}];
$scope.localSelectChange = function() {
alert('$scope.selectedLocal: ' $scope.selectedLocal); // returns undefined
}
}
Любопытно, что я создал этот jsfiddle, чтобы воспроизвести проблему, с ТОЧНО таким же кодом, и он работает.
Обновить:
Я создал plunkr здесь, где я повторяю проблему.
Первый выбор переносится в div с помощью собственного контроллера «MyCtrl», и он работает, как и ожидалось, поскольку я могу получить модель из функции обработчика событий ng-change.
Второй выбор «принадлежит» DashCtrl, всему контроллеру представления вкладки Dash. Когда я пытаюсь извлечь модель из функции обработчика событий ng-change, она возвращает мне неопределенное значение. Почему это так?
Комментарии:
1. Посмотрите, объявлены ли ng-app и ng-controller в вашем приложении. Также проверьте, включена ли библиотека angular в ваш проект.
2. есть ли причина для -2?
3. возвращает ли он неопределенный или [object object] ?
4. @TiagoBarreto да, все это объявлено и включено. все работает нормально. выбор заполняется данными из
locais
объекта и т. Д.5. @ryan, он возвращает неопределенный результат.
Ответ №1:
Попробуйте изменить «$scope.selectedLocal.Nome» на «this.selectedLocal.Nome»;
У меня были похожие ошибки, когда я пытался использовать includes внутри контроллеров… область швов потеряна.
Комментарии:
1. Мне тоже помогло, я также хотел бы знать: в чем проблема с $scope здесь? Спасибо!
Ответ №2:
Вам нужно объявленное значение объекта.
$scope.localSelectChange = function() {
alert('$scope.selectedLocal: ' $scope.selectedLocal.Nome);
}
Смотрите JSFiddle
Комментарии:
1. Это то, что я пытался в первую очередь… он возвращает мне ошибку:
TypeError: Cannot read property 'Nome' of undefined
потому что $scope.selectedLocal не определено2. @zok покажите мне полный код, потому что я не понимаю проблемы.
Ответ №3:
Я столкнулся с той же проблемой, попробуйте использовать «track by» в ng-options
<div ng-app ng-controller="MyCtrl">
<select ng-model="selectedLocal" ng-options="item.Nome for item in locais track by item.ID" ng-change="localSelectChange()">
<option value="">Locais</option>
</select>
</div>