我有一个看起来像这样的简单工厂
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
?
答案 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();
}
}
})