2013-09-17 3 views
6

У меня есть простой сервис, который выполняет несколько запросов. Услуга имеет два метода. Я не могу вызывать один метод из другого внутри службы.AngularJs вызывает внутреннюю функцию обслуживания от себя

Plunkr: http://plnkr.co/edit/2fERik4uTxbxlVOhncMd?p=preview

app.factory('Report', ['$http', function($http){ 
var Authors = { 

    reports : [], 
    requests :[{'url':'data/data.cfm','response':'first'}, 
       {'url':'data.json','response':'second'}, 
       {'url':'data.json','response':'third'}, 
       {'url':'data.json','response':'forth'}], 


getReport : function(target, source, response, callback) { 
    return $http({ url:source, 
        method:"POST", 
        params:{url : target} 
       }).success(function(result) { 
        $scope.progress = response; 
        angular.extend($scope.user, result) 
        console.log($scope.user) 
     } 
    ).error(function(error){ 
        $scope.progress = response 
       }) 
}, 

    startQueue : function (target) { 
     var promises = []; 
     this.requests.forEach(function (obj, i) { 
      console.log(obj.url) 
      promises.push(getReport(target, obj.url, obj.response, function(value){ 
       reports.push(value); 
       console.log(value) 
      })); 
     }); 
     $q.all(promises).then(function() { 
      console.log("Finito"); 
     },function(error){ 
      console.log("errori") 
     }); 
    } 

}; 

return Authors; 
}]) 

Когда я пытаюсь вызвать getReport внутри startQueue я получаю сообщение об ошибке: getReport не определен.

ответ

13

Измените свой завод по:

app.factory('Report', ['$http', function($http){ 
    var Authors = { 

     reports : [], 
     requests :[{'url':'data/data.cfm','response':'first'}, 
        {'url':'data.json','response':'second'}, 
        {'url':'data.json','response':'third'}, 
        {'url':'data.json','response':'forth'}], 
    }; 

    Authors.getReport = function(target, source, response, callback) { 

    }; 
    Authors.startQueue = function (target) { 

    }; 

    return Authors; 
}]) 
+0

Спасибо, это сработало. Но почему я получил ошибку: не могу вызвать метод «все» неопределенного, см. Обновление plunkr: http://plnkr.co/edit/2fERik4uTxbxlVOhncMd?p=preview – Tropicalista

+0

Я понимаю, что это были годы спустя, но это помогло бы улучшить это ответьте, показывая не только хороший код, но и подчеркнув, что из старого кода вы изменили, чтобы люди могли быстро увидеть, что вы исправили. – redfox05

1

Я знаю, что это «очень поздно», но, похоже, это потому, что вы не имеете $ д впрыскивается.

Изменение:

app.factory('Report', ['$http', function($http){ 

в

app.factory('Report', ['$http','$q', function($http,$q){ 
Смежные вопросы