1

JSON をロードして $rootScope を使用して保存し、コントローラー間で永続化しようとしています。アプリを実行すると、次のエラーが表示されます。

TypeError: Cannot call method 'get' of undefined

$rootScope を導入しようとするまで、 get メソッドは完全に機能していました... 何かアイデアはありますか?

私のサービスは次のようになります。

  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 }]);

私のコントローラーは次のようになります。

  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     });
4

3 に答える 3

7

ファクトリを定義する際に「配列パターン」を使用しています。関数で使用するサービスごとに文字列が必要ですが、1 つしかありません。

つまり、あなたがすることは

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

しかし、あなたがすべきことは

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

AngularJS は、文字列で名前が付けられた関数をパラメーターにマップします。それを試して、問題が解決するかどうかを確認してください。

EDIT:ああ、Reboog711からの答えは、問題を解決する上でより理にかなっています.コードの後半部分を見逃していました. ただし、ファクトリ定義も修正する必要があるため、この回答は残しておきます。

于 2014-03-13T10:51:03.537 に答える