如何处理AngularJS中route.resolve中的“复杂”逻辑

时间:2013-11-23 14:17:26

标签: angularjs angularjs-routing

目前在我的一些控制器中,我有一个逻辑,例如如果满足某些条件,则将用户重定向到不同的路由。

我正在尝试将某些逻辑从控制器移到route.resolve,以防止显示“无效”视图,然后将用户重定向到其他位置。

我已在route.resolve处理身份验证,但这只是一行 - authService.requireUser()。在更复杂的逻辑的情况下,例如我需要拥有当前的用户对象,根据路径参数获取一些资源,对结果进行一些计算,如果满足某些条件,则将用户重定向到一个地方,否则重定向到另一个等等。基本上它是很多代码并放置它所有路线定义似乎都不是很干净。

有没有人有解决方法如何处理它?也许使用单独的“路线解析器”对象?或者最好将它留在控制器中并使用标志(isLoaded)在页面加载时显示一个微调器,并在所有内容加载完成后显示正确的视图?

1 个答案:

答案 0 :(得分:0)

您可以注入具有该逻辑的服务。此服务可以返回一个承诺

resolve:{
      projects:['Projects', function (Projects) {
        //TODO: need to know the current user here
        return Projects.all();
      }],
      tasks:['Tasks', function (Tasks) {
        //TODO: need to know the current user here
        return Tasks.all();
      }]
    }

您可以使用演示应用程序查看此repo,以便为您提供一些想法。