当ng-include
用作标题时,如果地址(文件路径)不存在,如何捕获错误?
我完成了一个的ng-include router
内部ng-view(with ng-route)
,有点像这样:
ContentCtrl :
var content = $route.current.params.content,
tmplArr = content.split("_"),
tmpl = {},
personId=$route.current.params.personId||$scope.persons[0].id;
$scope.personId=personId;
tmpl.url = "content/";
for (var i = 0, len = tmplArr.length; i < len; i++) {
tmpl.url += tmplArr[i] + "/";
}
tmpl.url = tmpl.url.substring(0, tmpl.url.length - 1) + ".html";
$scope.template = tmpl;
ContentView :
<div ng-include="template.url" class="ng-animate"></div>
当我使用addr不存在:/ home /#/ content /
profile_asdfa时,角度只是在循环中获取资源。因此,当哈希中没有模板文件时,我需要捕获ng-include错误。有谁能够帮我 ?谢谢!
在源代码中查找ngInclude,似乎没有钩子或方法可以在模板不存在时直接检测到404(或其他)错误。您可能需要考虑添加一个功能请求,因为这听起来像是有用的功能。
但是,现在您可以使用http响应拦截器执行某些操作。如果可以通过某种方式来判断http请求是否针对模板(例如位于“内容”目录中),则可以拦截错误并对其进行处理。例如,您可以使用自定义指令替换数据,然后发出一个事件,以便控制器可以对其进行响应。
拦截器可以这样写:
app.config(function ($httpProvider) {
$httpProvider.interceptors.push('templateInterceptor');
});
// register the interceptor as a service
app.factory('templateInterceptor', function($q) {
return {
'responseError': function(rejection) {
var isTemplate = !!rejection.config.url.match(/^content/g);
if (isTemplate) {
rejection.data = '<div><template-error url="\''+ (rejection.config.url) + '\'"><strong>Error from interceptor.</strong></template-error></div>';
return rejection;
} else {
return $q.reject(rejection);
}
}
}
});
因此,当从“内容”指令中获取内容后出现错误时,它将添加一个元素<template- error>
来代替模板内容。html" target="_blank">编译然后链接该$emit
控件时,它是一个自定义事件,templateError
父控制器可以通过响应此事件$scope.$on
。因此,该指令可以像下面这样编码:
app.directive('templateError', function() {
return {
restrict: 'E',
scope: {
'url': '='
},
link: function(scope) {
scope.$emit('templateError', {url:scope.url});
}
};
});
然后在原始的父控制器中ngInclude
,您可以对此事件做出反应:
$scope.$on('templateError', function(e, data) {
$scope.templateError = true;
$scope.templateErrorUrl = data.url;
})
您可以在此Plunker中看到完整的工作代码。尽管我认为这有点不客气,但是如果Angular团队决定将$emit
ed事件添加到ngInclude
on错误代码中,那么只需删除拦截器/自定义元素就应该很容易。
问题内容: 我有一个控制器,我写的,我在多个地方使用我的应用程序和,就像这样: 在控制器/模板中,我希望该值存在,并且整个事情都围绕着这个想法建立。不过,现在,我需要以稍微不同的方式使用控制器,而无需使用,但仍然需要能够传递。我看到并认为它可以满足我的需要,例如: 但这似乎不起作用。任何人都有任何想法如何在这样的单个实例中为范围传递变量? 编辑:在此上方的控制器正在加载和值,如下所示: 问题答案:
问题内容: 嘿,我正在建立一个有角度的网页。问题是已经有一些东西没有角度了,我也必须包括它们 问题是这样的。 我的main.html中有这样的内容: 我的partial.html有这样的东西 我的partial.js与angularjs无关。nginclude工作正常,我可以看到html,但根本看不到正在加载的javascript文件。我知道如何使用firebug / chrome-dev-too
问题内容: 我在Python中构建了一个简短的url转换器引擎,并且看到大量的“管道破损”错误,并且很好奇在使用BaseHTTPServer类时如何最好地捕获它。这不是全部代码,但可以让您大致了解我目前正在做什么: 该代码本身运行良好,但是在生产中几乎立即开始引发错误: 这些错误的大部分似乎源于在调用send_header()方法时遇到的问题,其中我要写的是: 所以我很好奇在我的代码中尝试捕获此I
如何优雅地细粒度管理错误捕获? 比如我有下面这段代码 错误捕获? 一层套一层给我感觉就像是回调地狱。 以我这段代码为例(下面是我做的错误处理的方式,可以将try catch去掉,去实现你自己的错误捕获处理)
问题内容: 我正在读一本书,叫做《 Pro Angular JS》。但是,我有一个关于如何捕获错误状态的问题。 我编码的是: 如果我编写代码“ console.log($ scope.data.error.status);” ,为什么console.log的参数未定义? 这本书中有一句话,“传递给错误函数的对象定义了状态和消息属性。” 所以我做了$ scope.data.error.status
问题内容: 我有一些要从json文件加载的html数据。 我通过在应用程序中使用ngSanitize并使用ng-bind-html来显示此html数据。 现在我想从标准转换json blob中的任何链接 至: 。 所以我在json文件上做了一些regExp来转换链接,但是出于某种原因,但是ng-bind-html过滤掉了ng- click的输出,我不知道为什么。是否应该这样做,如果可以,可以禁用此