Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
捕获ng repeat表Angularjs中的重复异常_Angularjs_Exception Handling - Fatal编程技术网

捕获ng repeat表Angularjs中的重复异常

捕获ng repeat表Angularjs中的重复异常,angularjs,exception-handling,Angularjs,Exception Handling,每次在表中注册副本时,我都会尝试通知用户。我想捕获:错误:[ngRepeat:dupes]并在继续之前提醒用户。以下是向表中添加元素的控制器方法: $scope.addProdukt = function (item) { kladdValidationService.checkTable(); try { $scope.addedResult.push(item); // works fine logService.info('Produkte

每次在表中注册副本时,我都会尝试通知用户。我想捕获:
错误:[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);
};

每次我将已添加的项推送到表中时,
错误:[ngRepeat:dups]
会在控制台中输出。我不知道怎么抓住它

您可以尝试以下方法:

按$index跟踪始终删除duplicasy

<div ng-repeat="n in [42, 42, 43, 43] track by $index">
  {{n}}
</div>

{{n}}
我希望捕获:错误:[ngRepeat:dups]并在继续之前提醒用户

向用户显示您的代码因异常而崩溃

捕捉代码的异常并通知用户这些异常并不是好的做法。请记住,在出现
错误:[ngRepeat:dups]
后,您的代码无法正常工作!它可能导致意外的行为。消化循环停止等等

我强烈建议您编写在数组中搜索重复ID并通知用户的逻辑

不要根据您的需要使用角度异常流


无论如何,如果要管理异常,可以捕获override
$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) {
                //...
            }); 


这方面的东西?不幸的是,我现在无法测试这一点,但核心代码取自描述如何记录异常的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)
};
}]);

未捕获错误的原因是将副本推入数组是完全有效的,并且不会导致异常。异常发生在
ng repeat
指令中

如果您希望在用户尝试添加副本时通知用户,请尝试以下操作:

$scope.addProdukt = function (item) {
    if(addedResult.indexOf(item) != -1){
        console.log("You tried to add a duplicate");
    }else{
         $scope.addedResult.push(item);
    }
}
如果您想警告用户有重复项,但仍然让他们有重复项,那么您可以通过在
ng repeat
中添加
track by$index
在html中显示它 i、 e:



副本本身不是问题所在。我的问题是,表中的副本会产生一个未验证状态,除非控制台打开,否则用户无法看到该状态。我需要加载一个警报,例如,让用户纠正他们的错误。包含添加的项的数组和呈现它们的表是分开的。ng repeat将只显示一次项,即使它在数组中添加了两次,该数组稍后将在应用程序中使用。
<div ng-repeat="item in $scope.addedResult track by $index">
</div>