Проверка формы AngularJs - управляйте приоритетом пользовательских ошибок, чтобы отображать только одну ошибку с помощью директив ng-show

вот мой первый вопрос на этом замечательном форуме.

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

Вот мой HTML-код:

<input type="number" name="amountReceived" class="styled" data-ng-model="cashAmountReceived" required>
<div class="error" data-ng-show="cashPaymentForm.amountReceived.$error.required && cashPaymentForm.submitted">Valid amount required</div>
<div class="error" data-ng-show="cashPaymentForm.amountReceived.$error.notEnought && cashPaymentForm.submitted">It's not enought</div>
<div class="error" data-ng-show="cashPaymentForm.amountReceived.$error.negatif && cashPaymentForm.submitted">Positive value only</div>

и вот мой код контроллера:

$scope.$watch('cashAmountReceived', function() {

    if(angular.isNumber($scope.cashAmountReceived)){


         var tmp =  $scope.cashAmountReceived.toString();
         tmp = tmp.replace(/(\d{0,9})+\.(\d{0,2}).*/,'$1.$2');
         $scope.cashAmountReceived = parseFloat(tmp);

         if( $scope.cashAmountReceived < 0){
             $scope.cashPaymentForm.amountReceived.$setValidity('negatif', false);
             $scope.cashPaymentForm.amountReceived.$setValidity('notEnought', true);
         }
         else{
             $scope.cashPaymentForm.amountReceived.$setValidity('negatif', true);

             if($scope.cashAmountReceived < $scope.totalProductPrice){
                 $scope.cashPaymentForm.amountReceived.$setValidity('notEnought', false);
             }
             else{
                 $scope.cashPaymentForm.amountReceived.$setValidity('notEnought', true);
             }
         }
     } 
     else{
         $scope.cashPaymentForm.amountReceived.$setValidity('notEnought', true);
         $scope.cashPaymentForm.amountReceived.$setValidity('negatif', true);
     }
});

Я должен вручную управлять ошибками достоверности, чтобы убедиться, что только одна будет напечатана благодаря директивам ng-show на моей HTML-странице. Я хотел бы реализовать легко эволюционирующее решение на случай, если мне нужно добавить дополнительные критерии проверки.

Я думаю о том, чтобы сделать свою собственную директиву с системой управления приоритетами для моих пользовательских ошибок и совместимых с возможностями ошибок по умолчанию, но я не знаю, как поступить.

Или, может быть, я могу оставить процесс в контроллере и создать только одну пользовательскую ошибку с именем custom и определить переменную области видимости с именем errorReason, которая будет содержать соответствующее предупреждающее сообщение.

У меня будет что-то подобное в моем HTML-коде:

<input type="number" name="amountReceived" class="styled" data-ng-model="cashAmountReceived" required>
<div class="error" data-ng-show="cashPaymentForm.amountReceived.$error.custom && cashPaymentForm.submitted">{{errorReason}}</div>

Что вы, ребята, думаете об этом?

Прошу прощения, если мой английский неверен.


person stephane06    schedule 28.03.2014    source источник
comment
В ответе, который я дал здесь: stackoverflow.com/questions/22493774/ вы найдете директиву проверки, которая делает то, о чем вы говорите, то есть пользовательское сообщение об ошибке для каждой проверки, которое будет отображаться в порядке отказа проверки. Может быть, вы можете использовать это как отправную точку для того, что вы хотите.   -  person aet    schedule 29.03.2014
comment
Спасибо за ваш ответ, я попробую.   -  person stephane06    schedule 01.04.2014
comment
Возможный дубликат проверки формы HTML с использованием схемы json   -  person Paul Sweatte    schedule 28.11.2015