контроллер получает заводские данные, прежде чем данные будут установлены

0

У меня простая фабрика, которая выглядит так

myApp.factory('eventFactory', function(){
    var events = [];

    return {
        getEvents : function(){
            return events;
        },
        setEvent : function(event){
            events.push(event);
        }
    }
});

и когда мое приложение загружается, я выполняю обещание загружать события с удаленного сервера, когда обещание возвращается. Я запускаю: $scope.eventFactory.setEvent(event); для установки этих возвращенных событий на фабрику событий.

В моем другом контроллере я хочу установить эти события в переменную $scope, поэтому я eventFactory и делаю это:

$scope.eventFactory = eventFactory;
$scope.events = $scope.eventFactory.getEvents();

проблема в том, что это также запускается, когда приложение загружается первым, прежде чем обещание вернуло мои события, поэтому мой массив events на моей фабрике пуст, поэтому мои $scope.events в моем втором контроллере также пусты, и он не обновляется, когда обещание возвращается.

Как обновить $scope.events в моем втором контроллере, когда обещание возвращается в моем первом контроллере?

  • 0
    Не могли бы вы выложить код второго контроллера? Вы заменяете массив в scope ?
Теги:

1 ответ

0

вы должны использовать Resolve для загрузки событий, чтобы ваше приложение получало данные, когда их redy... для примера

    $stateProvider.state('root', {
      resolve:{
         // Example using function with simple return value.        
         promiseObj:  function(eventFactory){
         // eventFactory returns a promise for the  data
        return eventFactory.getEvents();
     }
   })

И в вашем контроллере вводят promiseObj для получения данных,

    myApp.controller('yourCtrl',function($scope,promiseObj){
       $scope.events = promiseObj; // binding the data in promiseObj to $scope 
    });

для ngRoute

   $routeProvider
    .when("/root", {
      templateUrl: "yourView.html",
      controller: "yourController",
      resolve: {
         promiseObj:  function(eventFactory){
           return eventFactory.getEvents();
           }
      }        
   })
  • 0
    уточните, пожалуйста, что такое $stateProvider например?
  • 0
    какой модуль вы используете для маршрутизации? , нг-маршрут?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню