Неопределенный параметр в контроллере из ng-модели - PullRequest
1 голос
/ 08 июля 2019

У меня есть данные из API, которые я использую для отображения формы.Форма содержит каскадные поля выбора.У меня есть 2 функции для фильтрации моего массива с результатами для следующего выбора, но я не могу прочитать свойство из ng-модели.

Например, я выбираю первый вариант и получаю его идентификатор, затем мне нужнопередать этот идентификатор моей функции в контроллере, который может фильтровать массив для возврата правильных опций.

API DATA

section: { id: "111", name: "Section1" }
nomination: { id: "666", name: "Nomination2" }
category: { id: "999", name: "Category2"}

SERVICE

const allSections = [
    { id: '111', section: 'Section1' },
    { id: '222', section: 'Section2' },
    { id: '333', section: 'Section3' },
];
const allNominations = [
    { id: '555', sectionId: '111', nomination: 'Nomination1' },
    { id: '666', sectionId: '222', nomination: 'Nomination2' },
    { id: '777', sectionId: '333', nomination: 'Nomination3' },
];
const allCategories = [
   { id: '999', sectionId: '111', category: 'Category1' },
   { id: '888', sectionId: '222', category: 'Category2' },
   { id: '000', sectionId: '333', category: 'Category3' },
];
getSection() {
   return allSections;
},
getSectionNomination(sectionId) {
   const nominations = ($filter('filter')(allNominations, { sectionId }));
   return nominations;
},
getNominationCategory(sectionId) {
   const categories = ($filter('filter')(allCategories, { sectionId }));
   return categories;
},

CONTROLLER

$scope.award = {};
$scope.sections = awards_service.getSection();
$scope.getSectionNominations = () => {
    $scope.nominations = 
    awards_service.getSectionNomination($scope.award.section.id);
    $scope.categories = [];
};
$scope.getNominationCategories = () => {
    $scope.categories = 
    awards_service.getNominationCategory($scope.award.section.id);
};

ПРОСМОТР

<select ng-model="award.section.id"
        ng-change="getSectionNominations()" 
        ng-options="object.id as object.section for object in sections")
</select>

<select ng-model="award.nomination.id"
        ng-change="getNominationCategories()"
        ng-options="object.id as object.section for object in nominations") 
</select>

<select ng-model="award.category.id"
        ng-options="object.id as object.section for object in categories"
</select>

Я пытаюсь получить выбранный идентификатор из данных API и отфильтровать мои массивы.В поле зрения я могу видеть правильный идентификатор как award.section.id, но когда я передаю этот папаметр для работы в моем контроллере, я получаю неопределенный результат.$ scope.award.section.id не определено.

1 Ответ

1 голос
/ 08 июля 2019

Попробуйте передать текущее значение выбора функции:

$scope.sectionId = 0;
if ($scope.sections && $scope.sections[0]) {
  $scope.sectionId = $scope.sections[0].id;
}
$scope.getSectionNominations = (sectionId) => {
    if (!sectionId) return;

    $scope.nominations = awards_service.getSectionNomination(sectionId);
    $scope.categories = [];
};

и в формате html:

<select 
  ng-model="sectionId"
  ng-change="getSectionNominations(sectionId)" 
  ng-options="object.id as object.section for object in sections"
>
</select>

См. Ответ здесь в Передать переменную в качестве параметра

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...