Как я могу проверить 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);
}