Я использую службу (фабрику) для доступа к моим данным на стороне сервера, я использую $routeParams
для включения идентификатора в запрос на сервер. И все это прекрасно работает, но только в первый раз, когда я запускаю программу, вот некоторые из моих кодов:
мой контроллер:
klusplan.success(function(data) {
console.log("onsucces",data);
$scope.klusplan = data[0];
$scope.klusplan.duratie = localStorage.getItem('Duration');
$scope.klusplan.orderId = localStorage.getItem('klusplan');
var tijdInUren = localStorage.getItem('Duration').split(":");
var Uren = tijdInUren[0];
var Minuten = tijdInUren[1];
Uren = Uren + (Minuten / 60);
$scope.klusplan.kosten = ($scope.klusplan.vm_kl_tarief * Uren);
});
мой сервис:
app.factory('klusplan', ['$http', '$routeParams', function($http, $routeParams) {
return $http.get('http://localhost:8080/getdata/klusplan.php?id='+$routeParams.klplan_id)
.success(function(data, status) {
console.log("succes", data, status);
return data;
})
.error(function(err) {
return err;
});
}]);
и, наконец, маршрут
.when('/klusplan/:klplan_id', {
controller: 'KlusplanController',
templateUrl: 'views/klusplan.html'
})
Я уже пробовал некоторые вещи вроде:
$httpProvider.defaults.headers.get['If-Modified-Since'] = 'Mon, 26 Jul 1997 05:00:00 GMT';
$httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache';
$httpProvider.defaults.headers.get['Pragma'] = 'no-cache';
а также
app.run(function($rootScope, $templateCache) {
$rootScope.$on('$routeChangeStart', function(event, next, current) {
console.log("event: ", event," next: ", next," current: ", current)
$templateCache.remove(current.templateUrl);
});
});
Теперь все voodoo начинается, когда я запускаю свое приложение во второй раз, вместо того, чтобы получать данные с сервера, HTTP-запрос никогда не срабатывает. Вместо этого он показывает мне данные, собранные в последний раз, когда я пробежал по нему.
Я был бы признателен за любую помощь.
Вы вызываете функцию klusplan.success
напрямую. Таким образом, вы всегда будете получать уже извлеченные данные.
Если вы пишете фабрику следующим образом:
app.factory('klusplan', ['$http', '$routeParams', function($http, $routeParams) {
return {
getData: function() {
return $http.get('http://localhost:8080/getdata/klusplan.php?id='+$routeParams.klplan_id);
}
};
}]);
А затем внутри контроллера:
klusplan.getData().then(function(data) { ...
Поэтому вы каждый раз вызываете $http.get
и получаете новые данные с сервера, а не только уже полученные данные.