я следующая проблема:хранить данные в контроллере во время маршрутизации в угловом
В AngularJS приложения я использую $routeProvider
для загрузки различных частей в применение
config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/view1', {templateUrl: 'partials/partial1.html', controller: 'MyCtrl1'});
$routeProvider.when('/view2', {templateUrl: 'partials/partial2.html', controller: 'MyCtrl2'});
$routeProvider.when('/users', {templateUrl: 'partials/users.html', controller: 'UserCtrl'});
$routeProvider.otherwise({redirectTo: '/view1'});
}]);
В моем UserCtrl отобразить список пользователей, которые я может манипулировать. Я прочитал список пользователей из JSON, который выглядит следующим образом:
{"users":[{"id":1,"name":"test user 2","mail":"[email protected]","ringer":true,"active":true},{"id":2,"name":"test user 1","mail":"[email protected]","ringer":false,"active":true},{"id":3,"name":"admin","mail":"[email protected]","ringer":false,"active":true}]}
В users.html
У меня есть контроллер, который вызывает службу загрузки данных
'use strict';
/* Controllers */
angular.module('myApp.controllers', []).
controller('MyCtrl1', [function() {
}])
.controller('MyCtrl2', [function() {
}])
.controller('UserCtrl', ['$scope', 'UsersService', function($scope, UsersService) {
//alert(UsersService.fetchData().length);
UsersService.fetchData().then(function(data){
// Do whatever you want with data, like:
$scope.users = data.users;
});
this.users = $scope.users;
this.selected = [];
this.searchTerm = '';
$scope.selected = this.selected;
}])
;
и, наконец, обслуживание:
'use strict';
/* Services */
// Demonstrate how to register services
// In this case it is a simple value service.
angular.module('myApp.services', []).
value('version', '0.1')
.factory('UsersService', function($http, $q) {
var data = [];
function fetchData() {
var deffered = $q.defer();
if (_isDataPresent()) {
deffered.resolve(_returnData());
} else {
//var deffered = $q.defer();
$http.get('php/users.php')
.success(function (d) {
deffered.resolve(d);
data = d.users;
});
return deffered.promise;
}
}
function _isDataPresent() {
return data.length;
}
function _returnData() {
return data;
}
return { fetchData : fetchData };
});
Проблема, которая у меня есть, заключается в следующем: каждый раз, когда я загружаю users.html
, данные перезагружаются из json-файла. Я хочу загрузить данные только один раз и сохранить их в своем контроллере. Теперь, когда я делаю некоторые изменения в данных, переключитесь на другое представление и вернусь, все изменения будут потеряны.
Любая помощь будет оценена по достоинству.
Спасибо, Zbynek
Создайте сервис, который хранит ваши данные при первом запросе, сохраняет значение. Затем, для следующего запроса, вы можете вернуть его «кэшированное» значение. Поскольку контроллеры постоянно меняются, вы не можете «хранить» данные там. – avcajaraville
Спасибо, у вас есть пример? – Zbynek
Я думаю, вам нужно хранить данные JSON в localstorage/cookie и т. Д. – Joy