控制器在设置数据之前获取工厂数据

时间:2016-04-22 10:43:58

标签: javascript angularjs

我有一个看起来像这样的简单工厂

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

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

当我的应用程序加载时,我运行一个承诺从远程服务器加载事件,当返回promise时,我运行:$scope.eventFactory.setEvent(event);将这些返回的事件设置为事件工厂。

在我的其他控制器中,我想将这些事件设置为$scope变量,因此我注入eventFactory并执行此操作:

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

问题是这也是在应用程序首次加载时运行,在promise返回我的事件之前,所以我工厂中的events数组是空的,因此我的第二个控制器中的$scope.events也是空的,并且在返回承诺时不会更新。

如果在我的第一个控制器中返回承诺,我如何在第二个控制器中更新$scope.events

1 个答案:

答案 0 :(得分: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();
           }
      }        
   })