1

Я пытаюсь обеспечить, чтобы при загрузке frame состояние, которое у моего $rootScope имеет все необходимые свойства, определенные из предыдущих состояний., сделав угловое обслуживание для обещания корневой системы

Модуль ionic.utils правильно введен в мое угловое приложение. Этот модуль поступает из моего файла services.js.

angular.module('ionic.utils', []) 
.factory('dataService', ['$rootScope','$q','$timeout', function($rootScope, $q, $timeout) { 
    return { 
     get: function() { 
      var deferred = $q.defer(); 
      $timeout(function() { 
       deferred.resolve($rootScope); 
      }, 2000); 
      return deferred.promise; 
     } 
    } 
}]); 

Внутри моих controllers.js файл, это соответствующий контроллер для моего frame состояния:

.controller('FrameCtrl', ['$scope','$state','$rootScope','dataService', 
function($scope, $state, $rootScope, dataService) { 
    // get active address and delivery time. 
    dataService.get().success(function() { 
     console.log("derp"); 
    }); 
}]) 

Однако этот контроллер возвращает следующее сообщение об ошибке консоли на переход состояния:

ionic.bundle.js:17696 TypeError: Cannot read property 'get' of undefined 
    at new <anonymous> (controllers.js:201) 
    at invoke (ionic.bundle.js:11591) 
    at Object.instantiate (ionic.bundle.js:11602) 
    at $get (ionic.bundle.js:14906) 
    at updateView (ionic.bundle.js:42986) 
    at IonicModule.directive.directive.compile.eventHook (ionic.bundle.js:42933) 
    at Scope.$get.Scope.$broadcast (ionic.bundle.js:20605) 
    at $state.transitionTo.$state.transition.resolved.then.$state.transition (ionic.bundle.js:34122) 
    at deferred.promise.then.wrappedCallback (ionic.bundle.js:19197) 
    at ionic.bundle.js:19283 

У меня возникли проблемы с поиском ошибки в сервисе, который я написал. Некоторая помощь будет принята с благодарностью!

EDIT После добавления инъекций зависимостей в мой контроллер, теперь ошибка изменилась. Вот оно:

TypeError: object is not a function 
    at new <anonymous> (controllers.js:202) 
    at invoke (ionic.bundle.js:11591) 
    at Object.instantiate (ionic.bundle.js:11602) 
    at $get (ionic.bundle.js:14906) 
    at updateView (ionic.bundle.js:42986) 
    at IonicModule.directive.directive.compile.eventHook (ionic.bundle.js:42933) 
    at Scope.$get.Scope.$broadcast (ionic.bundle.js:20605) 
    at $state.transitionTo.$state.transition.resolved.then.$state.transition (ionic.bundle.js:34122) 
    at deferred.promise.then.wrappedCallback (ionic.bundle.js:19197) 
    at ionic.bundle.js:19283 
+1

'angular.module ('ionic.utils', []) .factory ('dataService', ['$ rootScope', '$ q', '$ timeout', function ($ rootScope, $ q, $ Тайм-аут) { возврата { прибудут: функция() { вар отложили = $ q.defer(); $ таймаута (функция() { возвращение deferred.resolve ($ rootScope); }, 2000); возврата отложить.обещаю; }} }]); ' контроллер должен быть' dataService.get(), а затем (функция (.) { console.log ("Derp"); }); ' –

+0

Я не уверен, что вы опубликовали реализацию службы для ... Но мне удалось поймать этот '.then()' call. Казалось, это сработало. –

+0

Должен ли я добавить его как answer.will вы его принимаете? –

ответ

1

Обычно с обещаниями мы используем только .then, который выполняет функцию успеха как первый параметр и функцию ошибки как вторую.

success и error функции на обещание, что AngularJS добавляет для нас при использовании $http или $ ресурса. Они не стандартные, вы не найдете их в других обещаниях.

Код

dataService.get().then(function() { 
    console.log("derp"); 
}); 

Возвращение пропускал из deferred.resolve()

angular.module('ionic.utils', []).factory('dataService', ['$rootScope', '$q', '$timeout', function($rootScope, $q, $timeout) { 
     return { 
      get: function() { 
       var deferred = $q.defer(); 
       $timeout(function() { 
        return deferred.resolve($rootScope); 
       }, 2000); 
       return deferred.promise; 
      } 
     } 
    }]); 

Надеюсь, это поможет вам. Благодарю.

2

Ваш массив зависимостей в контроллере отсутствует множество зависимостей, переданных аргументов

.controller('FrameCtrl', [ 'Rootscope', function($scope, $state, 
$rootScope, Rootscope) { 

Должно быть

.controller('FrameCtrl', ['$scope','$state', '$rootScope', 'Rootscope', function($scope, $state, 
    $rootScope, Rootscope) { 

Конечно кажется запутанным мне назвать услугу Rootscope!

+0

Еще ошибка -__- Это определенно помогло некоторым, хотя! Изменено имя этого в dataService пока, пока я не подумаю о более лучшем имени. –