我有一种感觉,没有办法做到这一点,但我认为这不会有问题。我正在使用route.resolve
检查路由更改时的当前用户状态,并确定它们是否已获得该路由的授权。假设它们不是,理想情况下我想简单地显示错误模板,而不是将路由更改为指向错误页面。
显然后者更直接,但感觉不对。是否有可能以这种方式处理它,或者必须在这里获得更多创意。
我考虑过的一个解决方案是在根模板中显示基于$ rooteScope.errorState的指令。不是我最喜欢的解决方案,但暂时是可行的解决方案。
答案 0 :(得分:1)
ng-route
原本不支持,你可以让它工作,但需要一些努力。但是,您可以使用http://angular-route-segment.com/。
它使用ng-route
选项增强resolveFailed
,以便您可以定义一组新的控制器和模板,以便在解析器失败时使用。
答案 1 :(得分:1)
这是我最终使用的解决方案,它只使用核心ngRoute模块。自定义指令可能会使它更清洁但这确实有效。
$rootScope.$on '$routeChangeStart', (e, route) ->
$rootScope.errorTemplateUrl = null
$rootScope.$on '$routeChangeError', (e, c, p, error) ->
$rootScope.errorTemplateUrl = views['errors/' + error]
在我的项目views[]
中是模板的快捷方式名称列表。在这种情况下,我可以传递类似views['errors/404']
的内容,但您可以按照自己喜欢的方式获取错误模板网址。然后在我的基本视图中我有。
<div ng-if="!errorTemplateUrl" ng-view></div>
<div ng-if="errorTemplateUrl" ng-include="errorTemplateUrl"></div>
如果解析失败,我可以拒绝并传递我想要显示的错误模板的名称,然后将其正确显示。
答案 2 :(得分:0)
编辑:被误解的问题
在你的解析器中,当检测到拒绝访问时,请调用此
$templateCache.put('template.html', 'Access Denied');
然后解析路由成功。其中template.html是templateUrl的位置。