繁体   English   中英

UI-Router的resolve函数参数如何解析?

[英]How are UI-Router's resolve function arguments resolved?

我显然错过了UI-Router和/或angular的文档中的某些内容,因此,尽管我听起来很愚蠢,但这是:

http://angular-ui.github.io/ui-router/site/#/api/ui.router.state。$ stateProvider中,我们有一个示例resolve函数:

resolve: {
    myResolve1:
      function($http, $stateParams) {
        return $http.get("/api/foos/"+$stateParams.fooID);
      }
    }

我知道它的返回值将以名称“ myResolve1”注入到控制器中。

我不太清楚函数参数“ $ http”“ $ stateParams”的值来自何处 那么,调用者在哪里找到要提供给该函数的值?

这是一个好点,例如此处讨论的那样

AngularJS UI路由器抽象状态与解决

我们应该使用面向IoC的符号

resolve: {
    dataParent: ['$stateParams', 'ProfileService', function ($stateParams, ProfileService) {
        var username = $stateParams.username;
        return ProfileService.getProfile(username);
    }]
}

最大的好处是...即使缩小也能使用。 但实际上,现在已经非常清楚地说明了这一点:

有一个带有所有必需依赖项名称的数组-解析函数作为最后一个参数

您可以将通常会注入到控制器中的所有内容注入到包含其他解析的解析函数中。 您需要注意这一点,因为如果您要链接解析,则状态完全导航将花费更长的时间,因此会使视图变慢。 链接解析的示例如下所示。

resolve: {
    loggedIn: function(auth){ return  auth.requireLoggedIn()},
    user: function(loggedIn, auth){return auth.resolveUser()}
}

auth是我的角度应用程序中的一项服务,如您所见,loginIn是需要先解析的解决方案,然后才能用于加载您的用户。 然后,您可以将它们都注入到控制器中。

您可以在其中放置任何Angular服务,工厂,过滤器或解决方案。.我敢肯定,我也缺少可以添加的其他一些核心内容,但这通常是我要注入解决方案的内容。 因此,要回答您的问题,它们仅来自您的Angular应用程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM