2015-08-05 5 views
1

Я определяю сервис в AngularJS 1.2.x, как показано ниже, где я вставляю DreamFactory API для использования в этой службе. Теперь, когда я делаю это, я получаю сообщение об ошибке, какТребуется обязательное заполнение приложения AngularJS

TypeError: Cannot read property 'getRecords' of undefined 

Я интерпретирую, что инъекция не полностью прекращена. Поэтому я пошел вперед и отложил вызов API 1000ms, который решает проблему. Но, конечно, эта задержка не является приемлемым решением. Как-то мне нужно событие для завершения инъекции, после чего я могу запустить метод DreamFactory.api.db.getRecord().

Может ли кто-нибудь помочь?

(function() { 
'use strict'; 

angular 
    .module('app') 
    .service('VisitService', VisitService); 

     VisitService.$inject = ['$cookieStore', '$rootScope', '$timeout', 'DreamFactory']; 
     function VisitService($cookieStore, $rootScope, $timeout, DreamFactory) { 

      var service = {}; 

      service.getVisits = getVisits; 


       function getVisits(callback) { 

        //setTimeout(function(){ 

         DreamFactory.api.db.getRecords({table_name: 'visitors'}) 
         .then(function(result) { 

          console.log(result.data.record); 
          callback(result.data.record) 
         }, 


         function(reject) { 


         }); 
        //}, 1000); 


       } 

       return service; 


     } 

})();

в контроллере, я вызываю службу как так

VisitService.getVisits(function(result){ 
     alert("this callback was triggered") 
     console.log(result) 
    }); 
+1

Вам нужно проверить 'DreamFactory' - где-то вдоль линии нет объекта' db'; поэтому сообщение. \ – Darren

+0

Эй, Даррен, я использую для объявления DreamFactory как ........... var loginApp = angular .module ('app', [ 'ngRoute', 'ngCookies', 'ngDreamFactory' ]) .constant ('DSP_URL', 'http: // localhost: 8080') .constant ('DSP_API_KEY', 'myApp') –

+0

и, я прекрасно получаю свои данные, когда у меня есть небольшие 1000 мс добавлена ​​задержка. –

ответ

1

DreamFactory использует, помимо того, на основе API обещание, еще одно условие, что один должен искать.

Я делаю это с:

$scope.$on('api:ready', function (e) { } 

Этими наблюдающим присутствуя решает мою проблему. Спасибо всем, кто пытался помочь