#javascript #angularjs
#javascript #angularjs
Вопрос:
Я должен привязать несколько выпадающих списков в контроллере (GridSearchCtrl), т. е. в другом контроллере (DiplomaProgramGridCtrl). я пробовал приведенный ниже код, но он выдает ошибку $ scope.advSearch не определен
DiplomaProgramController.controller('GridSearchCtrl', ['$scope', 'DiplomaProgramService',
function ($scope, DiplomaProgramService) {
$scope.loadDropDowns = function ($scope) {
DiplomaProgramService.loadDropDowns('abcd').then(function (DiplomaProgram) {
$scope.advSearch.depts = DiplomaProgram.depts;
$scope.advSearch.degreesList = DiplomaProgram.degreesList;
// Here it shows the list perfectly
console.log($scope.advSearch.degreesList);
});
};
$scope.loadDropDowns($scope);
// Here it generates error i.e. $scope.advSearch is undefined
console.log($scope.advSearch.degreesList);
}]);
Представление выглядит следующим образом
<select id="ddlDegrees" name="degrees" ng-model="advSearch.DegreeLevelID" ng-options="a.DegreeLevelID as a.DegreeLevelName for a in degreesList" required>
<option value="">-- select --</option>
</select>
Ответ №1:
Я предполагаю, что то, что находится внутри .then (функция), является асинхронным, поэтому ваша консоль.журнал выполняется до определения $scope.advSearch.
Попробуйте сделать это вместо этого (я пока не знаю, как работают promises, поэтому $ scope.$apply может вообще не иметь значения в этом случае):
DiplomaProgramService.loadDropDowns('abcd').then(function (DiplomaProgram) {
$scope.$apply(function() {
$scope.advSearch.depts = DiplomaProgram.depts;
$scope.advSearch.degreesList = DiplomaProgram.degreesList;
// Here it shows the list perfectly
console.log($scope.advSearch.degreesList);
}
});
Он по-прежнему не будет работать с console.log, но он должен сообщить Angular, что ваша область была обновлена, и заставить ваше представление работать.