所以这真的很奇怪,也许它有一个我想念的简单答案。以下代码提供了未知的提供程序错误:
var foo = angular.module('foo', [ 'ngRoute', 'ngAnimate', 'ngCookies' ]);
foo.factory('fooApi', function ($scope, $http) {
var url = '/api/';
var factory = {};
factory.action = function (fields) {
fields.userid = $scope.userid;
fields.token = $scope.token;
console.log(JSON.stringify(fields));
return $http.post(url, { data: fields });
};
return factory;
})
.controller('loginController', function ($scope, fooApi) {
// do stuff
});
它们都在同一个文件中加载,我认为工厂首先会解决,并且注入器能够在下面引用时找到它。但它会给出未知的提供程序错误。
但是,如果我注释掉控制器并等待页面加载,然后在Chrome JS控制台中执行完全相同的控制器声明,它就可以正常工作。
之前有人遇到这个并且知道如何处理它吗?我无法在任何地方找到同样的问题。
答案 0 :(得分:0)
就像@tasseKATT所说,你不能将$scope
注入服务,特别是factory
。也许你的困惑是因为$scope
可以注入控制器,所以你试图注入factory
。
有趣的是,您看到注入控制器的$scope
不是服务 - 就像其他可注入的东西一样 - 而是一个Scope对象。
$scope
的主要目的是视图和控制器之间的粘合之王,将$scope
传递给服务没有多大意义。
服务只能访问$rootScope
服务。
如果您需要将特定控制器的$scope
传递给服务,您可以将其作为服务中函数的参数传递。不推荐这种方法,因为开始打破SoC和单一责任原则,但可能适合你。