我尝试在每次在表中注册副本时通知用户。我想抓住:Error: [ngRepeat:dupes]
并在继续之前提醒用户。以下是向表中添加元素的控制器方法:
$scope.addProdukt = function (item) {
kladdValidationService.checkTable();
try {
$scope.addedResult.push(item); // works fine
logService.info('Produktet er lagt til i tabellen');
} catch (e) {
console.log(e.stack);
console.log($exceptionHandler(e)); // neither of these two work
}
console.log($scope.addedResult);
};
每次我将已添加的项目推送到表格时,控制台中的Error: [ngRepeat:dupes]
输出。 Juswt不确定如何抓住它。
答案 0 :(得分:2)
未捕获错误的原因是因为将副本推送到数组中是完全有效的,并且不会导致异常。例外情况发生在ng-repeat
指令中。
如果您希望在尝试添加重复内容时通知您的用户,请尝试以下操作:
$scope.addProdukt = function (item) {
if(addedResult.indexOf(item) != -1){
console.log("You tried to add a duplicate");
}else{
$scope.addedResult.push(item);
}
}
如果您想警告用户有关副本,但仍然让他们有重复项,那么您可以通过在track by $index
中添加ng-repeat
在html中显示它
即:
<div ng-repeat="item in $scope.addedResult track by $index">
</div>
答案 1 :(得分:0)
您可以尝试以下方法:
跟踪$ index 始终删除重复的
<div ng-repeat="n in [42, 42, 43, 43] track by $index">
{{n}}
</div>
答案 2 :(得分:0)
我想抓住:错误:[ngRepeat:dupes]并在继续之前提醒用户。
向用户显示您的代码因异常而崩溃?
捕获代码的异常并通知用户这是不好的做法。请记住,在Error: [ngRepeat:dupes]
之后 - 您的代码无法正常运行!它可能导致意外的行为。摘要循环停止等等。
我强烈建议您编写逻辑,在数组中搜索重复的ID并通知用户。
请勿根据需要使用Angular Exception流程!
无论如何,如果你想管理异常,你可以捕获覆盖$exceptionHandler
:
例如:
app.config(function($provide) {
$provide.decorator("$exceptionHandler", function($delegate, $injector) {
return function(exception, cause) {
var data = {
message: "Exception: " + exception.message,
stack: exception.stack || "none"
};
// manage your exception
alert(JSON.stringify(data));
// Call The original Angular Exception Handler
$delegate(exception, cause);
};
});
});
您可以注入一些服务并在其中传递所有异常数据:
// ...
var someService = $injector.get("SomeService");
someService.reportClientError(data).then(function(data) {
//...
}, function(error) {
//...
});
答案 3 :(得分:0)
这方面的东西?不幸的是,我现在无法测试这个,但核心来自描述如何记录异常的anguarJS示例代码
angular.
module('exceptionOverwrite', []).
factory('$exceptionHandler', [function() {
var exceptions = [];
return function myExceptionHandler(exception, cause) {
if(exceptions.indexOf(exception) !== -1)
{// its duplicate do your thing
}
this.exceptions.add(exception)
};
}]);