Модель выбора в AngularJS возвращает неопределенное значение

#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>