Мое угловое приложение запускается в состоянии/home (я использую ui-router), у которого есть свой собственный контроллер, в котором я вызываю фабричный метод для получения некоторых объектов json из мой API, который я разделяю благодаря этой фабрике между всем приложением. Я помещаю список, который я получаю от этого в объекте $ scope состояния/home.AngularJS: Сохранять состояние просмотра между различными видами с разными контроллерами
Что я хочу сделать, так это вызвать этот метод init на заводе только один раз, еще лучше, если контроллер/home вызывается только один раз.
Фактически, когда я перехожу в другое состояние, например/about, и когда я возвращаюсь в/home, контроллер/home снова вызывается, а также метод init на заводе. Итак, как мне сохранить начальное состояние представления?
StuffFactory.js:
app.factory('StuffFactory', function ($window, $http, $q) {
var stuffs;
return {
initStuffsList: function() {
return $http.get('http://myapi/stuff/init')
.then(function (response) {
stuffs = (angular.fromJson(response.data.result));
});
},
getStuffs: function() {
return stuffs;
}
};
});
homeController.js:
app.controller('homeCtrl', function ($scope,StuffFactory) {
StuffFactory.initStuffsList().then(function(){
$scope.stuffs = StuffFactory.getStuffs();
});
});
app.js:
.config(['$stateProvider', '$urlRouterProvider']
$urlRouterProvider.otherwise('/home');
$stateProvider
.state('home', {
url: '/home',
templateUrl: './partials/home.html',
controller:homeCtrl
})
.state('about', {
url: '/about',
templateUrl: './partials/about.html',
controller:aboutCtrl
})
Спасибо, что очень много! Это именно то, что я пытался сделать, не зная, как это сделать. – Nuzzob