ui-router状态转换为控制台的拒绝承诺的不需要的打印错误

时间:2017-02-16 08:38:43

标签: javascript angularjs angular-ui-router

我正在使用角度为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"));
        });
      }
    }
  });

,只要访问此状态,就会在控制台上打印以下错误:

console error

请参阅此Plunker以获取最低限度的工作示例。

有没有办法摆脱控制台错误,同时保持其余的行为?

3 个答案:

答案 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

Here is a new plunker

答案 2 :(得分:1)

你可以使用这样的替代方式:

$rootScope.$on('$stateChangeStart', function (evt, toState,
toParams, fromState, fromParams, options) {
    if(not_allowed) {
       evt.preventDefault();
    }
}