为什么我的工厂没有实例化/注入?

时间:2013-03-12 17:46:28

标签: angularjs

为什么阅读Controller无法使用罗马化服务?它总是说在函数内部未定义Romanize。如何在范围内获得服务?

var readingController = function (scope, Romanize){
    scope.currentMaterial = scope.sections[scope.sectionNumber].tutorials[scope.tutorialNumber].material;
    Romanize;
}

var app = angular.module('Tutorials', ['functions', 'tutorials']).controller('getAnswers', function ($scope, $element) {
    $scope.sectionNumber = 0;
    $scope.tutorialNumber = 0;
    $scope.questionNumber = 0;
    $scope.sections = sections;
    $scope.loadFromMenu = function (sec, tut, first) {
        if (tut === $scope.tutorialNumber && sec === $scope.sectionNumber && !first) {//if clicked on already playing tut
            return;
        } 
        if (tut !== undefined && sec !== undefined) {
            $scope.tutorialNumber = tut;
            $scope.sectionNumber = sec;
        }
        for (var x in sections) {
            sections[x].active = "inactive";
            for (var y in sections[x].tutorials){
                sections[x].tutorials[y].active = "inactive";
            }
        }
        var section = sections[$scope.sectionNumber];
        section.active = "active";
        section.tutorials[$scope.tutorialNumber].active = "active";
        $scope.questionNumber = 0;
        $scope.currentTutorialName = sections[$scope.sectionNumber].tutorials[$scope.tutorialNumber].name;
        $scope.$apply();
        if ($scope.sectionNumber === 0){
            readingController($scope, app.Romanize);
        }else if ($scope.sectionNumber === 1){
            conjugationController($scope);
        }
    };

    $scope.loadFromMenu(0,0, true);

    var conjugationController = function (){
        var loadNewVerbs = function (scope) {
            scope.currentVerbSet = scope.sections[scope.sectionNumber].tutorials[scope.tutorialNumber].verbs;
            if (scope.currentVerbSet === undefined) {
                alert("Out of new questions");
                return
            }
            scope.verbs = conjugate(scope.currentVerbSet[scope.questionNumber]);
            scope.correct = scope.verbs.conjugations[0].text;
            fisherYates(scope.verbs.conjugations);
            scope.$apply();
        };
        loadNewVerbs($scope);
        $scope.checkAnswer = function (answer) {
            if($scope.sectionNumber === 0 && $scope.tutorialNumber === 0 && $("video")[0].currentTime < 160){
                $scope.message = "Not yet!";
                $(".message").show(300).delay(900).hide(300);
                return;
            }
            answer.colorReveal = "reveal-color";
            if (answer.text === $scope.correct) { //if correct skip to congratulations          
                $scope.questionNumber++;
                setTimeout(function () {
                    loadNewVerbs($scope);
                    $scope.$apply();
                }, 2000);
            } else { //if incorrect skip to try again msg
                if ($scope.sectionNumber === 0 && $scope.tutorialNumber === 0) {
                    start(160.5);
                    pause(163.8)
                }
            }
        };
    };

});

app.factory('Romanize', ['$http', function($http){
    return{
      get: function(){
          $http.get(scope.sections[scope.sectionNumber].romanizeService).success(function(data) {
                $scope.romanized = data;
            });
        }
    };
}])

1 个答案:

答案 0 :(得分:1)

更新:基于以下评论/讨论:

对于要实例化的服务,必须将其注入某个地方 - 而不仅仅是任何地方 - Angular接受注射剂的地方。只需将它注入你的getAnswers控制器 - .controller('getAnswers', function ($scope, $element, Romanize) - 然后将其传递给你的“控制器”函数:readingController($scope, Romanize)

由于我不认为readingController是一个真正的Angular控制器,你可以根据需要命名参数,所以scope应该没问题。


原始尝试答案:

$scope而不是scope注入您的控制器:

var readingController = function ($scope, Romanize){

然后我没有收到任何错误:Plunker