У меня простая фабрика, которая выглядит так
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
в моем втором контроллере, когда обещание возвращается в моем первом контроллере?
вы должны использовать 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();
}
}
})
$stateProvider
например?
scope
?