解析 $injector 中不可用的对象

Resolve objects not available in $injector

我有一个路由定义如下:

.state('user_login', {
                url: '/user/login',
                templateUrl: 'login.tpl.html',
                controller: 'AuthenticationCtrl',
                resolve: {
                    practice: ['$q', function($q) {
                        return $q.when({});
                    }]
                }
            })

当我将 "practice" 注入控制器时,一切正常。但是当我使用 $injector 服务时:

$injector.get('practice')

我收到一个未知的提供商异常。解析对象对 $injector 不可用吗?我如何才能在控制器中公开它们而无需在控制器定义中显式注入它们?

注:我用的是Angular1.2.x

不,您不能通过 $injector 单独获取它们。并且

解析对象不是任何服务或任何其他可以单独注入的实体。它是通过路由器绑定控制器 AuthenticationCtrl 时由路由器注入的特殊依赖项。您无法单独获取实例。只有路由器知道解析属性,并且在路由器实例化控制器时(一旦解析了所有解析依赖项),它会在注释中查找解析属性(通过 [= 指定的依赖项列表) 24=] 路由绑定控制器的 AuthenticationCtrl) 定义中的依赖注释,并将它们注入为 required.

这种特殊的实现也可以在其他组件中找到,angular-ui-modal,ui-state-router,angular-路由器的 routeprovider 等..