表格验证angularjs dupes上的Ng重复错误

时间:2014-09-21 14:45:29

标签: angularjs ng-repeat

我正在进行一些自定义验证并使用ngDialog显示错误。但出于某种原因导致此错误:

Error: [ngRepeat:dupes] http://errors.angularjs.org/undefined/ngRepeat/dupes?p0=error%20in%20checkoutError&p1=string%3Ae
    at Error (native)
    at http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.0rc3/angular.min.js:6:453
    at http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.0rc3/angular.min.js:180:90
    at Object.fn (http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.0rc3/angular.min.js:95:475)
    at g.$digest (http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.0rc3/angular.min.js:96:367)
    at g.$apply (http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.0rc3/angular.min.js:99:100)
    at http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.0rc3/angular.min.js:108:229
    at e (http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.0rc3/angular.min.js:33:182)
    at http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.0rc3/angular.min.js:36:388 

它显示一个空的弹出窗口。当我在重复中按索引添加轨道时,它会显示弹出的错误,但句子的每个字母都在一个新行上......由于某种原因,它将每个字母视为数组中的值。这就是我的所作所为:

CONTROLLER方法

$scope.submitCheckout = function() {
    //** Validate **//
    $scope.checkoutError = [];
    //Check deliverytimne
    if ($scope.deliverytime == '0') {
      $scope.checkoutError = "Selecteer een bezorgtijd";
      ngDialog.open({
        template: 'error',
        scope: $scope,
        controller: 'Checkout',
        className: 'ngdialog-theme-plain',
        closeByDocument: false
      });
    }

    if($scope.checkoutError.length > 0){   
      ngDialog.open({
        template: 'error',
        scope: $scope,
        controller: 'Checkout',
        className: 'ngdialog-theme-plain',
        closeByDocument: false
      });
    }

弹出窗口包含:

<dl>
  <dt ng-repeat="error in checkoutError" style="padding:5px;color:red;">&diams; {{error}}</dt>
</dl>

并且表单会在提交时提交确认...

1 个答案:

答案 0 :(得分:2)

您需要将错误推送到数组,而不是将其设置为字符串。

即。改变

$scope.checkoutError = "Selecteer een bezorgtijd";

$scope.checkoutError.push("Selecteer een bezorgtijd");

否则ng-repeat将遍历字符串的字符并尝试显示它们,因为js中的字符串是字符数组,因此在这种情况下,ngrepeated项的跟踪将发生在整个字符串的字符上,因此它找到e是重复的,但它失败了。最好使用唯一值的轨道,例如$indexsomeId(并将它们作为带有id和消息的错误对象附加),这样它就不会将字符串本身用作id跟踪。否则,如果阵列中有相同的消息,则最终会再次出现重复错误。