2015-06-17 3 views
1

У меня есть список клиентов моей БД, которые все присоединились в разные годы. Я настроил api для этого и отлично работает. И мой код с Angularjs работает в поиске правильных данных, только проблема, потому что это тот же маршрут, например/clients /: id, он не обновляет данные, он обновляет его, если я вручную обновляю браузер. Любая помощь будет отличной.Обновление данных на AngularJs

HTML ссылки

<table>  
<tr><td><a href="#customers/2014">2014</a></td></tr> 
<tr><td><a href="#customers/2013">2013</a></td></tr> 
<tr><td><a href="#customers/2012">2012</a></td></tr> 
</table> 

App.js (образец, где его называют)

.when("/Archive/:param/", { 
     templateUrl: "Customers/Customers.html", 
     controller:"CustomersController" 
    }) 

CustomersController

(function() { 

var CustomersController = function ($scope, customerService, $log, $routeParams, $location, $sce) { 

    var param = $routeParams.param; 
    var customer = function (data) { 
    $scope.Customer= data; 
    }; 

    var errorDetails = function (serviceResp) { 
     $scope.Error = "Something went wrong ??"; 
    }; 

    var refresh = function() { 
     customerService.customer(param) 
     .then(customer, errorDetails); 
    }; 

    refresh(); 


}; 

app.controller("CustomersController", ["$scope", "customerService", "$log", "$routeParams", "$location", "$sce", CustomersController]); 
}()); 

CustomerService.js

(function() { 
    var customerService = function ($http, $q, $log, $scope) { 
     var cachedCustomer; 

     var customer = function (param) { 
      var params = param; 
      console.log("this is the "+params); 

      if (cachedCustomer) 
       return $q.when(cachedCustomer); 

      return $http.get("http://localhost:8080/api/customers/year/" + params) 
         .then(function (serviceResp) { 

          $log.info(cachedCustomer); 
          cachedCustomer = serviceResp.data; 
          $log.info(cachedCustomer); 
          return serviceResp.data; 
         }); 
     }; 

     return { 
      customer: customer, 

     }; 
    }; 

    var module = angular.module("CustomerModule"); 
    module.factory("customerService", ["$http", "$q", "$log", customerService]); 
}()); 
+1

Может быть, это из-за этого: 'если (cachedCustomer) вернуть $ q.when (cachedCustomer);' –

+0

Эй, я удалил эту строку кода на данный момент, и он работает :) Спасибо за указание, где находится проблема :) – georgieboy

ответ

2

В customerService.js в этой строке

   if (cachedCustomer) 
        return $q.when(cachedCustomer); 

вы проверяете для кэшированного результата, а затем возвращается, что кэшированный результат, если он существует. Поскольку вы устанавливаете кеш в свой блок .then, и вы никогда его не удаляете, вызов $ http выполняется только каждый раз, поскольку службы действуют как объекты одноэлементного типа. Если вы хотите получать обновленную информацию, я рекомендую либо добавить флаг clientService.customer(), который пропускает проверку кеша. В качестве альтернативы, в customerService вместо кэширования результата обещания (данных) вы можете просто кэшировать неразрешенные обещания, а затем очистить это, как только вы получите данные в своем .then. Это предотвращает выполнение нескольких вызовов до $ http до тех пор, пока не будет отменено как минимум 1 разрешает/отклоняется

+0

Эй, я удалил эту строку кода на данный момент, и это работает :) Спасибо, что указали, где находится проблема :) – georgieboy

0

Обновление браузера действительно очищает cachedCustomer и повторно запрашивает информацию. Вы должны указать, что вам необходимо очистить cachedCustomer при изменении года paramater, с которым вы проходите.

Вы можете создать службу кэширования, которая хранит информацию о клиенте на основе URL-адреса, с которой они запрашиваются. Другими словами, вы можете создать массив, похожий на хэш-карту, которая хранит информацию как значение, и использует в качестве ключа URL. Хотя я бы не рекомендовал это, когда ваши данные будут изменены (на внутреннем сервере) много.

0

Попробуйте использовать

$route.reload(); 

Пожалуйста впрыснуть $ маршрут в контроллере

Смежные вопросы