所以这真的很奇怪,也许它有一个我错过的简单答案。下面的代码给出了一个未知的提供程序错误:AngularJS:直到页面加载后才知道提供商?
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控制台中执行完全相同的控制器声明,则它工作正常。
任何人都遇到过这种情况,并知道如何处理它?我无法在任何地方找到同样的问题。
你可以试试:'foo.facotry(); foo.controller()'。基本上没有链接它们。看到注入工厂的'$ scope'也是有点奇怪的。我不确定这会工作(从未尝试过)。通常你会将范围或两个字段(userid,token)传递给函数。 – lucuma
你可以显示你的'.html'是如何加载你所有的javascript文件的?我想知道如果你的应用程序的依赖项之一还没有加载...... – tennisgent
你不能在工厂注入'$ scope'。应该给你'未知提供者:$ scopeProvider < - $ scope < - fooApi'。如果您将控制器注释掉,您将不会得到该错误,因为直到有人第一次请求时才会启动工厂。 – tasseKATT