我正在进行一些自定义验证并使用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;">♦ {{error}}</dt>
</dl>
并且表单会在提交时提交确认...
答案 0 :(得分:2)
您需要将错误推送到数组,而不是将其设置为字符串。
即。改变
$scope.checkoutError = "Selecteer een bezorgtijd";
到
$scope.checkoutError.push("Selecteer een bezorgtijd");
否则ng-repeat将遍历字符串的字符并尝试显示它们,因为js中的字符串是字符数组,因此在这种情况下,ngrepeated项的跟踪将发生在整个字符串的字符上,因此它找到e
是重复的,但它失败了。最好使用唯一值的轨道,例如$index
或someId
(并将它们作为带有id和消息的错误对象附加),这样它就不会将字符串本身用作id跟踪。否则,如果阵列中有相同的消息,则最终会再次出现重复错误。