如何删除角度js中的文件未找到错误

时间:2015-07-20 05:09:25

标签: angularjs angularjs-directive angularjs-scope ionic-framework angular-ui-router

我正在尝试处理角度js中的异常。我能够在一个场景中处理但是在场景中它无法处理为什么?

实际上当任何未定义的东西时,它会捕获我的$ exceptionHandler.But当找不到文件时它不会被$ exceptionHandler捕获 为什么

实施例 plunker http://plnkr.co/edit/mm4Uix8XXVrkhexW15vR?p=preview

案例1

当我点击这个

$http.get("default.json").then(successcallback, errorcallback);

成功alert(data.hhh.getname()); it is undefined which is catch by $ exceptionHandler并存储在数组中。这是输出enter image description here

案例2 但是当我将文件default.son的名称更改为defaul.json时,它是不是被$ exceptionHandler捕获为什么? 它在console.can上显示404错误我们捕获此错误并在控制台上打印?我们可以抓住这个错误..?

其实我不想收到此错误enter image description here

如何处理此错误?

1 个答案:

答案 0 :(得分:1)

请参阅$exceptionHandler的文档。请注意部分:

  

注意,在事件监听器中执行的代码(即使是那些使用jqLit​​e' s on / bind方法注册的代码)也不会将异常委托给$ exceptionHandler(除非在摘要期间执行)。

这意味着$exceptionHandler捕获了digest cycle引发的未捕获异常。但是,如果您实际点击了投掷404的行,您应该注意到XHR在Angular的$apply之外抛出了它,因此$exceptionHandler不在除了它以外的范围。另一方面,您的data.hhh.getname()成功进行$q成功回调,该回调包含在$apply中,因此被$exeptionHandler捕获。

修改 实际上article I linked for digest cycle更好地解释了这一点。

  

请记住,您应该始终使用接受函数参数的$ apply()版本。这是因为当你将函数传递给$ apply()时,函数调用被包装在try ... catch块中,并且发生的任何异常都将被传递给$ exceptionHandler服务。

它不仅仅是一个摘要周期,还需要在$apply的范围内。否则,Angular没有机会将try ... catch块放在任何地方以捕获异常并将其传递给$exceptionHandler

编辑仔细检查后,您在控制台中看到的404甚至不是例外。它由XHR console.error登录到$http,这是一个原生API。所以你在控制台看到的东西必须留下来,不能被抓住。但请注意,您始终可以在其故障回调中检查$exceptionHandler失败,因此您可以注入responseError: function(error){ $exceptionHandler(new Error( error.config.method + ' ' + error.config.url + ' ' + error.status +' ' + '(' + error.statusText + ')' )); return $q.reject(error); } (我看到您已自行配置)并手动使用它进行登录。例如

<?php get_header('nofound'); ?>

请参阅Plunker