Приложение Angular показывает только скорректированный динамический контент после обновления

0

Я использую службу (фабрику) для доступа к моим данным на стороне сервера, я использую $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-запрос никогда не срабатывает. Вместо этого он показывает мне данные, собранные в последний раз, когда я пробежал по нему.

Я был бы признателен за любую помощь.

Теги:
caching
http

1 ответ

0

Вы вызываете функцию 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 и получаете новые данные с сервера, а не только уже полученные данные.

  • 0
    Конечно! Не за моим столом в это время, но я реализовал это таким образом в другом месте, спасибо!
  • 0
    Практически вам пришлось использовать $ q, чтобы получить потерянный набор результатов. Я сделал редактирование, но вы отклонили его: /
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню