【问题标题】:Resolve objects not available in $injector解析 $injector 中不可用的对象
【发布时间】:2015-01-16 14:14:42
【问题描述】:

我的路由定义如下:

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

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

$injector.get('practice')

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

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

【问题讨论】:

    标签: angularjs dependency-injection route-provider


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-03
      • 1970-01-01
      • 2019-01-12
      • 2021-05-18
      • 1970-01-01
      • 2021-09-07
      • 2016-06-07
      相关资源
      最近更新 更多