AngularJS:在页面加载之前的未知提供程序?

时间:2014-06-20 19:19:26

标签: 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控制台中执行完全相同的控制器声明,它就可以正常工作。

之前有人遇到这个并且知道如何处理它吗?我无法在任何地方找到同样的问题。

1 个答案:

答案 0 :(得分:0)

就像@tasseKATT所说,你不能将$scope注入服务,特别是factory。也许你的困惑是因为$scope可以注入控制器,所以你试图注入factory

有趣的是,您看到注入控制器的$scope不是服务 - 就像其他可注入的东西一样 - 而是一个Scope对象。

$scope的主要目的是视图和控制器之间的粘合之王,将$scope传递给服务没有多大意义。

服务只能访问$rootScope服务。

如果您需要将特定控制器的$scope传递给服务,您可以将其作为服务中函数的参数传递。不推荐这种方法,因为开始打破SoC和单一责任原则,但可能适合你。

祝你好运: - )