无法将工厂注入angularjs控制器
为什么WizardPageSchoolclassCodesFactory工厂没有注入?它总是空的 我的chrome控制台中的错误如下:无法将工厂注入angularjs控制器,angularjs,Angularjs,为什么WizardPageSchoolclassCodesFactory工厂没有注入?它总是空的 我的chrome控制台中的错误如下: Error: [$injector:unpr] Unknown provider: $scopeProvider <- $scope <- WizardPageSchoolclassCodesFactory angular.module('myModule').controller('WizardMainController', fun
Error: [$injector:unpr] Unknown provider: $scopeProvider <- $scope <- WizardPageSchoolclassCodesFactory
angular.module('myModule').controller('WizardMainController', function ($scope, WizardPageSchoolclassCodesFactory) {
// do stuff with data
});
'use strict';
angular.module('myModule').factory('WizardPageSchoolclassCodesFactory', function($scope) {
this.getData = function()
{
return "hello";
}
});
如果要将范围传递到工厂,可以通过以下方式进行:
app.factory('WizardPageSchoolclassCodesFactory', function() {
return function(scope){
this.getData = function()
{
scope.test = "test";
return "hello";
}
}
});
在控制器中,您必须创建工厂的新实例,并在构造函数中传递范围:
var factory = new WizardPageSchoolclassCodesFactory($scope);
然后可以使用声明的工厂方法:
factory.getData();
从工厂定义中删除$scope的注入,并在工厂中创建API。为什么我不能将该范围注入工厂?我删除了$scope,但没有任何更改!请参考此。很抱歉,删除$scope有帮助,我刚刚收到另一个错误,这是误导!你的工厂被宣布为服务。工厂应该是一个返回对象的函数。我当然不想把$scope带到控制器之外。我只是想知道为什么这样做会出现“异常”的技术原因……这样,工厂与控制器紧密耦合。工厂应该从控制器逻辑中抽象出来。您可以将变量测试发送到工厂,而不是全部发送范围。有道理吗?@dmahapatro你说得对,但有时通过范围有好处。例如,最近我不得不创建widgets dashboard——每个widget都有自己的作用域,并且widget应该通过发送/接收事件相互通信。我没有在每个控制器中重复相同的代码,而是将传递的作用域注入工厂,这个工厂为我创建监听器。看起来是这样的:。而不是写入范围。$on。。。我可以简单地使用工厂方法将侦听器注册到作用域。在工厂中传递控制器作用域是一种不好的做法。。。这显然违反了封装IMHO。