错误未知提供程序:$ scopeProvider <-使用$ injector将$ scope注入控制器时的$ scope

雅亚·凯姆

以这种方式使用DI时:

var MainController = function MainController($scope) {
  //use $scope here
};
MainController.$inject = ["$scope"];

它可以正常工作,但是当像这样使用时:

var MainController = function MainController($injector) {
  var $scope = $injector.get("$scope");
};
MainController.$inject = ["$injector"];

这将导致错误:

错误:[$ injector:unpr]未知提供程序:$ scopeProvider <-$ scope

这里有一个plunker用一个例子,展示错误,检查是否有替代的评论看,只有不定制服务受此影响范围。
我发现了这个Angular错误,他们谈到在Tomer Avni回答创建子$ scope之前实例化控制器,所以:

  1. 为什么第一种注入$scope工作而第二种却没有?
  2. 并且有一种方法可以使用依赖注入的第二种方法$injector进行注入$scope吗?
汤姆·塞尔登

我已经回复了您,但在这里回答可能会对其他有相同问题的人有所帮助。


当您给Angular一个要调用的函数具有将从依赖项注入派生的值(例如服务,控制器等)时,Angular将:

  • .$inject在函数对象上查找一个属性,该属性应该是字符串形式的依赖项名称(例如['$scope'])。
  • 如果$inject未定义,它将使用函数定义的参数(在大多数情况下都可以使用,除非缩小代码并弄乱名称)。

因此,简而言之,它将查找您在DI容器中指定的名称。

$scope 在DI容器中不存在,仅$rootScope存在。因此,如果您直接访问注入器并请求的实例$scope,您将在这里看到注入错误。

在工作的示例中,您不是直接访问注入器,而是依靠Angular来研究如何创建控制器。这是一个细微的差异,但是在这种情况下是一个重要的差异。在Angular中,创建控制器实例时,它将解析$scope为调用结果$rootScope.$new()(即,在单元测试中手动实例化控制器时将执行的操作)。

我希望这可以解释您的示例为何无效的原因。

至于第二个问题,您可以通过执行以下操作来手动获取范围实例:

var $scope = $injector.get('$rootScope').$new();

但是现在我们开始走上一条模糊的道路……$injector直接注入是非常不典型的如果可以的话,我会避免的。您有理由这样做吗?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

错误:[$ injector:unpr]未知提供程序:$ scopeProvider <-$ scope错误

来自分类Dev

在工厂错误中注入服务:[$ injector:unpr]未知提供程序:$ scopeProvider <-$ scope <-ProjectService <-Project

来自分类Dev

AngularJS抛出未知提供程序:$ scopeProvider <-当我尝试使用模块时出现$ scope错误

来自分类Dev

filter $ scope错误:未知提供程序:$ scopeProvider <-$ scope <-transformSensorStatusFilter

来自分类Dev

Angularjs错误未知提供程序:$ scopeProvider <-$ scope <-用户

来自分类Dev

AngularJS:未知提供程序:$ scopeProvider <-$ scope错误(未在服务中注入$ scope)

来自分类Dev

未知提供者:$scopeProvider <- $scope

来自分类Dev

AngularJS服务未定义:未知提供程序:$ scopeProvider <-$ scope

来自分类Dev

将服务注入控制器时,Angular获取未知的提供程序错误

来自分类Dev

Jasmine 测试:$scopeProvider <- $scope <-> DetailController

来自分类Dev

将Angular服务注入控制器会导致$ injector:unpr错误(使用AngularBooter)

来自分类Dev

将$ http和$ scope注入控制器中的函数

来自分类Dev

ngMock将$ scope局部注入控制器

来自分类Dev

$injector:unpr 使用 Jasmine 进行测试时出现未知提供程序错误

来自分类Dev

在控制器中使用`this`范围时使用$ scope。$ watch

来自分类Dev

AngularJS未知提供程序:$ scopeProvider

来自分类Dev

错误:[$ injector:unpr]未知提供程序-将AngularJS1迁移到Angular6时

来自分类Dev

错误:在控制器中注入服务时,[$ injector:unpr]

来自分类Dev

错误:在控制器中注入服务时,[$ injector:unpr]

来自分类Dev

错误:[$ injector:unpr] http://errors.angularjs.org/1.5.0/$injector/unpr?p0=%24scopeProvider%20%3C-%20%24scope%20%3C-%20

来自分类Dev

错误:[$ injector:unpr] http://errors.angularjs.org/1.5.0/$injector/unpr?p0=%24scopeProvider%20%3C-%20%24scope%20%3C-%20

来自分类Dev

Angular新路由器将$ scope注入控制器

来自分类Dev

在控制器中使用服务时,使用Angular ui-router时出现“未知提供程序”错误

来自分类Dev

如何将使用$ scope的函数包含/注入到angularjs的控制器中?

来自分类Dev

为什么将控制器声明为内部变量或使用$ scope

来自分类Dev

如何使用angularjs将$ scope变量从控制器传递到指令

来自分类Dev

如何从AngularJS中的控制器调用工厂/服务?错误:组件$ injector中的未知提供程序错误

来自分类Dev

Angular.js将错误消息从服务传递到控制器$ scope

来自分类Dev

“错误:[$injector:unpr] 未知提供者:”更新控制器依赖项时

Related 相关文章

  1. 1

    错误:[$ injector:unpr]未知提供程序:$ scopeProvider <-$ scope错误

  2. 2

    在工厂错误中注入服务:[$ injector:unpr]未知提供程序:$ scopeProvider <-$ scope <-ProjectService <-Project

  3. 3

    AngularJS抛出未知提供程序:$ scopeProvider <-当我尝试使用模块时出现$ scope错误

  4. 4

    filter $ scope错误:未知提供程序:$ scopeProvider <-$ scope <-transformSensorStatusFilter

  5. 5

    Angularjs错误未知提供程序:$ scopeProvider <-$ scope <-用户

  6. 6

    AngularJS:未知提供程序:$ scopeProvider <-$ scope错误(未在服务中注入$ scope)

  7. 7

    未知提供者:$scopeProvider <- $scope

  8. 8

    AngularJS服务未定义:未知提供程序:$ scopeProvider <-$ scope

  9. 9

    将服务注入控制器时,Angular获取未知的提供程序错误

  10. 10

    Jasmine 测试:$scopeProvider <- $scope <-> DetailController

  11. 11

    将Angular服务注入控制器会导致$ injector:unpr错误(使用AngularBooter)

  12. 12

    将$ http和$ scope注入控制器中的函数

  13. 13

    ngMock将$ scope局部注入控制器

  14. 14

    $injector:unpr 使用 Jasmine 进行测试时出现未知提供程序错误

  15. 15

    在控制器中使用`this`范围时使用$ scope。$ watch

  16. 16

    AngularJS未知提供程序:$ scopeProvider

  17. 17

    错误:[$ injector:unpr]未知提供程序-将AngularJS1迁移到Angular6时

  18. 18

    错误:在控制器中注入服务时,[$ injector:unpr]

  19. 19

    错误:在控制器中注入服务时,[$ injector:unpr]

  20. 20

    错误:[$ injector:unpr] http://errors.angularjs.org/1.5.0/$injector/unpr?p0=%24scopeProvider%20%3C-%20%24scope%20%3C-%20

  21. 21

    错误:[$ injector:unpr] http://errors.angularjs.org/1.5.0/$injector/unpr?p0=%24scopeProvider%20%3C-%20%24scope%20%3C-%20

  22. 22

    Angular新路由器将$ scope注入控制器

  23. 23

    在控制器中使用服务时,使用Angular ui-router时出现“未知提供程序”错误

  24. 24

    如何将使用$ scope的函数包含/注入到angularjs的控制器中?

  25. 25

    为什么将控制器声明为内部变量或使用$ scope

  26. 26

    如何使用angularjs将$ scope变量从控制器传递到指令

  27. 27

    如何从AngularJS中的控制器调用工厂/服务?错误:组件$ injector中的未知提供程序错误

  28. 28

    Angular.js将错误消息从服务传递到控制器$ scope

  29. 29

    “错误:[$injector:unpr] 未知提供者:”更新控制器依赖项时

热门标签

归档