解析$ injector中不可用的对象

时间:2015-01-16 14:14:43

标签: angularjs dependency-injection route-provider

我的路线定义如下:

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

当我将“练习”注入控制器时,事情按预期工作。当我使用$ injector,service时:

$injector.get('practice')

我收到了一个未知的提供程序异常。 $ injector是否无法使用解析对象?我怎样才能在控制器中公开它们而不在控制器定义中明确地将它们注入?

注意:我使用的是Angular 1.2.x

1 个答案:

答案 0 :(得分:2)

不,您无法通过$injector单独获取它们。并且you cannot even inject them separately as well in other places, say the same controller (AuthenticationCtrl) instantiated by ng-controller directive

解析对象不是任何可以单独注入的服务或任何其他实体。当控制器AuthenticationCtrl通过路由器绑定时,它是路由器注入的特殊依赖项。您无法单独获取实例。只有路由器知道解析属性,并且路由器实例化控制器(一旦所有解析依赖关系被解析),它就会在注释中查找解析属性(通过显式/隐式依赖注释指定的依赖列表)在路由约束控制器的AuthenticationCtrl的定义中)并根据需要注入它们。

这种特殊的实现可以在其他组件中找到,例如angular-ui-modal,ui-state-router,angular-router的routeprovider等。