我正在使用角度为1的ui-routers状态定义的resolve属性来提供一个返回promise的函数。提供的功能应检查是否允许用户访问该状态。
如果返回的承诺被拒绝,则状态转换不会发生 - 正是我想要实现的目标。此外,我可以收听$stateChangeError
事件以获取有关拒绝的详细信息。一切正常。
我的问题是错误会打印到控制台上我想避免的错误。
考虑这种状态定义:
$stateProvider.state({
name: 'about',
url: '/about',
template: '<h3>Its the UI-Router hello world app!</h3>',
resolve: {
isAllowed:function(){
return new Promise(function(resolve, reject){
reject(new Error("not allowed"));
});
}
}
});
,只要访问此状态,就会在控制台上打印以下错误:
请参阅此Plunker以获取最低限度的工作示例。
有没有办法摆脱控制台错误,同时保持其余的行为?
答案 0 :(得分:2)
可能是因为您使用的 angular-ui-router 版本。试试This version (0.4.2)。你不会在这个版本中得到错误。
答案 1 :(得分:1)
由于您使用ui-router
的{{1}}版本属于BETA版本,因此其脚本中只剩下少量angular-ui-router@1.0.0
行。
因此,您可以使用更稳定的版本来解决此问题,例如您可以使用console.log
在保留其余行为的同时摆脱angular-ui-router@0.3.1
答案 2 :(得分:1)
你可以使用这样的替代方式:
$rootScope.$on('$stateChangeStart', function (evt, toState,
toParams, fromState, fromParams, options) {
if(not_allowed) {
evt.preventDefault();
}
}