为什么我的Angular服务中的$ http.get()未定义?

Pet*_*rne 1 service json angularjs rootscope

我正在尝试加载一些JSON并使用$ rootScope存储它,以便它在控制器之间保持不变.当我运行我的应用程序时,我收到以下错误:

TypeError: Cannot call method 'get' of undefined
Run Code Online (Sandbox Code Playgroud)

get方法完美运行,直到我尝试引入$ rootScope ...任何想法?

我的服务如下:

  1 /**
  2  * Service to get the quiz data from a JSON source
  3  */
  4 app.factory('quizService', ['$rootScope', function ($scope, $rootScope, $http) {
  5     var promise;
  6     var service = {
  7         getQuiz: function($scope, $http) {
  8             if ( !promise ) {
  9                 promise = $http.get('QuizFileName.quiz').then(function (response) {
 10                     return response.data;
 11                 });
 12             }
 13             return promise;
 14         }
 15     };
 16     return service;
 17 }]);
Run Code Online (Sandbox Code Playgroud)

我的控制器看起来像这样:

  7     // Get Quiz data from service
  8     quizService.getQuiz().then(function(data) {
  9         $scope.quiz = data;
 10
 11         // Redirect to scores if already completed this
 12         if($scope.quiz.complete === true) {
 13             $location.path('scores');
 14         }
 15     });
Run Code Online (Sandbox Code Playgroud)

Axe*_*son 7

您在定义工厂时使用"阵列模式".您应该在函数中使用的每个服务都有一个字符串,但只有一个.

也就是说,你做的是

app.factory('quizService', ['$rootScope', function ($scope, $rootScope, $http) {
    //insert code
}]);
Run Code Online (Sandbox Code Playgroud)

但你应该做的是

app.factory('quizService', ['$scope', '$rootScope', '$http', function ($scope, $rootScope, $http) {
    //insert code
}]);
Run Code Online (Sandbox Code Playgroud)

AngularJS将使用字符串命名的函数映射到参数.试试看,看看它是否解决了你的问题.

编辑:啊,Reboog711的答案在解决问题时更有意义,我不知道错过了代码的后半部分.但是我要留下这个答案,因为你还应该修复工厂定义.