javascript - 抛出自定义错误时触发 $stateChangeError

标签 javascript angularjs angular-ui-router

我在 Angular 应用程序中使用 UI 路由。 检查每个州的授权。如果授权,则会抛出自定义错误。我希望 $stateChangeError 处理从 $stateChangeStart 抛出的任何自定义错误。

$stateChangeStart

 $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState) {
      $log.info("Route change start from", fromState.url, "to", toState.url);
       $rootScope.isAuthorized = authorize(toState);

          if ($rootScope.isAuthorized) {
            $log.info('is Authorized')
          } else {
            $log.info('not Authorized');
            throw new AuthorizationError()
          }
        });

    });

自定义错误

  function AuthorizationError(description) {
      this.message = "Forbidden";
      this.description = description || "User authentication required.";
    }
    AuthorizationError.prototype = Object.create(Error.prototype);
    AuthorizationError.prototype.constructor = AuthorizationError;

最佳答案

谢谢大家,找到解决方案了。我正在广播$stateChangeError来自AuthorizationError本身。这只是一个解决方法,如果有其他方法可以实现此目的,我将发布答案(除了在 deferredresolve 中拒绝 state )

function AuthorizationError(description, code) {
      this.message = "Forbidden";
      this.description = description || "User authentication required.";
      this.code = code || 'NOT_AUTHENTICATED';
      $rootScope.$broadcast('$stateChangeError', $rootScope.state.to, $rootScope.state.toParams, $rootScope.state.from, $rootScope.state.fromParams, this);
    }

<强> rootscope.state

var transitionTo = $state.transitionTo;
$state.transitionTo = function(to, toParams, options) {
      var from = $state.$current,
        fromParams = $state.params;

      to = to.name ? to : $state.get(to);

      $rootScope.state = {
          to: to.self,
          toParams: toParams,
          from: from.self,
          fromParams: fromParams,
          options: options
        }

           return transitionTo(to, toParams, options)
        })
      }
    }

关于javascript - 抛出自定义错误时触发 $stateChangeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44675211/

相关文章:

javascript - 在 Electron 中引用 Node 模块?

javascript - 我已经使用 javascript/firebase 构建了应用程序,并希望它返回最后 5 个搜索并使每个搜索都可点击

javascript - 用于签名板的 Angular 形式自定义模板

angularjs - mongo/mongoose 查询查找删除空间的字段

angularjs - 如何将自定义数据从 ui-router 中的 View 传递到状态?

angularjs - 更改 URL 会破坏路由阻止

javascript - 如何在 RequireJS 中为模块分配变量?

javascript - jQuery 按条件过滤行

javascript - Angular Directive(指令)不适用于子元素

angularjs - UI 路由器 $stateparams 未在 $state.go() 中注册