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

时间:2016-06-02 14:26:48

标签: javascript angularjs angular-ui-router

我显然已经错过了UI-Router和/或angular的文档,所以,虽然我听起来很愚蠢,但这里是:

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

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

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

对我来说不太清楚的是功能参数“$ http”“$ stateParams”的值来自哪里。那么,调用者在哪里找到赋予此函数的值?

2 个答案:

答案 0 :(得分:1)

这是一个很好的观点,例如在这里讨论

Angularjs ui-router abstract state with resolve

我们应该使用面向IoC的表示法

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

最大的好处是......即使应用了缩小,它也会起作用。但大多数情况下,现在已经明确说明:

  

有一个包含所有必需依赖项名称的数组 - 而resolve函数作为最后一个参数

答案 1 :(得分:0)

您可以将通常注入控制器的任何内容注入解析函数,包括其他解析。您需要小心这一点,因为如果您正在进行链接解析,则状态需要更长时间才能完全导航,因此渲染视图会变慢。链接解析的一个例子看起来像这样。

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

auth是一个服务,它是我的角度应用程序的一部分,你可以看到loggedIn是一个解决方案,需要先解决才能用于加载你的用户。然后,您可以将这两个注入控制器。

你可以把任何Angular服务,工厂,过滤器或解决方案放在那里。而且我确定我错过了一些你可以添加的其他核心内容,但这通常是我注入的决心。所以要回答你的问题,他们只是来自你的Angular应用程序。