- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
以这种方式使用 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"];
这将导致错误:
Error: [$injector:unpr] Unknown provider: $scopeProvider <- $scope
这是一个plunker通过展示错误的示例,请检查替代方案的注释,以查看只有范围而不是自定义服务受此影响。
我找到了这个Angular bug他们谈论在子 $scope 创建之前实例化 Controller Tomer Avni回答,所以:
$scope
的方法有效,而第二种则不行? $injector
来注入(inject) $scope
?最佳答案
我已经在 gitter 上回复了您,但在这里回答可能会帮助其他有同样问题的人。
<小时/>当你给 Angular 一个要调用的函数,该函数具有从依赖注入(inject)(例如服务、 Controller 等)派生的值时,Angular 将:
.$inject
属性,该属性应该是依赖项名称字符串数组(例如 ['$scope']
)。<$inject
未定义,它将使用函数定义的参数(在大多数情况下有效,除非您缩小代码并且名称被破坏)。因此,简而言之,它将查找您在 DI 容器中指定的名称。
$scope
DI 容器中不存在,只有 $rootScope
存在。因此,如果您直接访问注入(inject)器并请求 $scope
实例,您将收到此处看到的注入(inject)错误。
在它起作用的示例中,您没有直接访问注入(inject)器,而是依赖 Angular 来确定如何创建 Controller 。这是一个细微的差别,但在本例中却是一个重要的差别。在 Angular 中,创建 Controller 实例时,它将把 $scope
解析为调用 $rootScope.$new()
的结果(即手动实例化 Controller 时会执行的操作)在单元测试中)。
我希望这能解释为什么你的例子不起作用。
对于第二个问题,您可以通过执行以下操作来手动获取作用域实例:
var $scope = $injector.get('$rootScope').$new();
但是现在我们开始走上一条相当黑暗的道路...直接注入(inject) $injector
是非常不典型的。如果可以的话我会避免这种情况。您需要这样做有什么理由吗?
关于javascript - 错误未知提供商 : $scopeProvider <- $scope when using $injector to inject $scope into controller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35409855/
我在尝试在 Controller 中使用 $scope 服务时遇到问题。 Controller 基本上取自 angular-seed 项目。 'use strict'; angular.module(
我已经在 AngularJS 中创建了一个具有 Skinny AngularJS Controllers 的应用程序。该应用程序工作正常,但问题是当我尝试使用 $controller('Control
我有一个如下所示的 js 文件。 (function(){ angular.module("MyModule",[]) .service('testService',testServi
您好,我正在使用 Jasmine 编写第一个 Angular 测试,但我不断收到错误 ------ 测试开始:文件:C:\Users\Regan\Documents\Visual Studio 201
我得到 - Error: [$injector:unpr] Unknown provider: $scopeProvider <- $scope运行以下测试时: describe('mainCtrl'
我用 Jasmine (http://jasmine.github.io/2.0/)测试我的 Angular 应用程序并得到下一个错误:未知提供者:$scopeProvider <- $scope我知
我收到此错误未知提供程序:$scopeProvider $rootScope. 关于javascript - 未知提供商 : $scopeProvider initialling angularjs
我是 AngularJS 的新手。我创建了以下包含模板和关联 Controller 的组件。 angular. module('beerDetail'). controller('BeerDetail
我得到了错误 Unknown provider: $userProvider <- $user" 使用以下代码: var app = angular.module('test', []); app.f
我的 AngularScript 遇到错误,我试图从 Web API 加载一些数据并尝试使用 ng-repeat 来了解 Angular 的基础知识。 https://docs.angularjs.o
我正在尝试使用 Jasmine 和 Karma 为网络应用程序的特定 Controller 实现单元测试。目前它给出以下错误: Chrome 53.0.2785 (Mac OS X 10.10.5)
我目前正在为我的 Xtext dsl 实现交叉引用。一个 dsl 文件可以包含多个 XImportSection,在某些特殊情况下,XImportSection 不一定包含所有导入语句。这意味着我需要
我已经开始学习 Angular JS,但在将服务注入(inject) Controller 时遇到了问题。我试图将 ThreadFactory 服务放入 ThreadController 中,但在调用
marsApp.filter("transformSensorStatus", function($scope) { return function(input, options) {
我收到此常见错误错误:[$injector:unpr] Unknown provider: $scopeProvider <- $scope用我的测试用例。我知道这是一个常见的问题,并且很少有其他线程
我似乎与许多其他使用 AngularJS 和依赖项注入(inject)的人有类似的问题,即:当我尝试将服务注入(inject) Controller 时,我的 AngularJS 应用程序给出了一个
以这种方式使用 DI 时: var MainController = function MainController($scope) { //use $scope here }; MainCont
我刚开始使用 AngularJS以下代码在控制台中给出错误。 未知提供者:$scopeProvider <- $scope <- newActiveOrdersModel 。我已经研究过,但看起来未知
我创建了一个服务来使用 Web API Controller 方法从数据库中提取数据。但是每当我注入(inject)服务并调用 Controller 中的服务方法时,它都会显示以下错误: Error:
我想在我的工厂中注入(inject)我的服务,以便在我的 Controller 中使用我的工厂: Controller app.home.controller('HomeController', ['
我是一名优秀的程序员,十分优秀!