UI-Router:创建规则以防止访问状态

时间:2015-09-16 14:27:36

标签: angularjs url-routing single-page-application angular-ui-router

UI-router FAQ中,他们提出了一些方法来阻止基于data.rule状态方法访问某些状态。假设当前用户由某个$currentUser服务确定。

然而,在现实世界的用例中,这种假设似乎并非如此。因为通常这种$currentUser服务的实现方式是它从服务器查询当前用户,并且可能返回的最佳服务是当前用户的 promise 。因此,在触发$stateChangeStart事件时,此承诺很可能尚未解决。

考虑到上述讨论,那么最好的做法是什么呢?

注意:

一种解决方法可能是在每个安全状态中包含resolve属性,并使用一个返回当前用户承诺的函数。但我真的不喜欢它,因为它有点打破了我心中的封装。

1 个答案:

答案 0 :(得分:1)

这里的解决方案是推迟UI路由器执行 - 直到$currentUser得到解决。该技术可以从内置功能中获益: deferIntercept(defer)

$urlRouterProvider

  

deferIntercept(defer)

     

禁用(或启用)延迟位置更改拦截。

     

如果您希望自定义同步URL的行为(例如,如果您希望延迟转换但保留当前URL),请在配置时调用此方法。然后,在运行时,在配置了自己的$ locationChangeSuccess事件处理程序之后调用$ urlRouter.listen()。

可以在这里找到并观察所有细节