Как я могу проверить ng-повторяющийся селектор категории выпадающего?

Я создал модель вложенной категории. Чтобы выбрать категорию для продукта, вы видите раскрывающийся список с основными категориями. Когда вы выбираете один, справа добавляется новый выпадающий список с дочерними категориями к той, которую вы выбрали. Это повторяется, пока вы не достигнете последнего уровня. Когда это произойдет $scope.product.category_id установлено. Я хочу сделать недействительным весь набор полей, когда $scope.product.category_id является null,

Я использовал https://github.com/paulyoder/angular-bootstrap-show-errors для проверки и попытался смешать его с ui-utils, чтобы достичь этого, используя пользовательскую функцию: validate_category(),

Вот HTML-код, который я использовал:

<span ng-repeat="parent_id in category_dropdown_parents" show-errors="{ skipFormGroupCheck: true }">
    <select class="form-control" name="category_id"
        ng-init="selected_category[$index] = init_select($index);"
        ng-model="selected_category[$index]"
        ng-options="category.name for category in (categories | filter : { parent_id: parent_id } : true ) track by category.id "
        ng-change="select_category(selected_category[$index], $index)"

        ui-validate="'validate_category()'" // added this to work with ui-utils

        >
    </select> 
    <span ng-if="$index+1 != category_dropdown_parents.length">/</span>
</span>

И это моя простая функция проверки:

$scope.validate_category = function() {
    return  (   $scope.product.category_id !== null 
            &&  $scope.product.category_id !== undefined);
}

Но это не работает. Идеи?

РЕДАКТИРОВАТЬ: я только что понял, что проблема в том, что функция проверки на ui-validate выполняется после ng-change функция, поэтому он никогда не сможет проверить $scope.product.category_id Обновить.

2 ответа

Решение

Это не идеальный ответ, но это лучшее, что я мог получить. Позор мне, это было слишком просто

<select class="form-control" name="category_id"
    ng-init="selected_category[$index] = init_select($index);"
    ng-model="selected_category[$index]"
    ng-options="category.name for category in (categories | filter : { parent_id: parent_id } : true ) track by category.id "
    ng-change="select_category(selected_category[$index], $index)"

    required // !!!

    >
</select> 

Вот и все, только что добавил required приписывать. Проблема в том, что, так как я не проверяю product.category_id но только проверка всех выпадающих, чтобы не быть пустым. Я думаю, мне придется положиться на код select_category(),

Ваш выбор использует

ng-model="selected_category[$index]"

но функция проверки использует

$scope.product.category_id

Разве это не должно быть использование

ui-validate="'validate_category($index)'"

а также

$scope.validate_category = function($index) {
    return($scope.selected_category[$index] !== null 
    && $scope.selected_category[$index] !== undefined);
}
Другие вопросы по тегам