Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法将工厂注入angularjs控制器_Angularjs - Fatal编程技术网

无法将工厂注入angularjs控制器

无法将工厂注入angularjs控制器,angularjs,Angularjs,为什么WizardPageSchoolclassCodesFactory工厂没有注入?它总是空的 我的chrome控制台中的错误如下: Error: [$injector:unpr] Unknown provider: $scopeProvider <- $scope <- WizardPageSchoolclassCodesFactory angular.module('myModule').controller('WizardMainController', fun

为什么WizardPageSchoolclassCodesFactory工厂没有注入?它总是空的

我的chrome控制台中的错误如下:

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。