AngularJs上的数据刷新

时间:2015-06-17 11:19:56

标签: javascript angularjs

我的数据库中有一个客户列表,他们都是在不同年份加入的。我已经配置了我的api以适应这个并且工作正常。我和Angularjs的代码在拉入正确的数据,只有问题,因为它是相同的路由,例如/ customers /:id它不刷新数据,如果我手动刷新浏览器,它会刷新它。任何帮助都会很棒。

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]);
}());

3 个答案:

答案 0 :(得分:2)

在此行的customerService.js中

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

您正在检查缓存的结果,然后返回该缓存的结果(如果存在)。由于您在.then块中设置了缓存,并且永远不会将其删除,因此$ http调用仅在服务充当单例对象时进行一次。如果您希望能够获取更新信息,我建议您向customerService.customer()添加一个跳过缓存检查的标志。或者,在customerService中,您可以只缓存未解决的承诺本身,而不是缓存承诺的结果(数据),然后在收到.then中的数据后清除它。这可以防止多次调用$ http,直到至少1次结算/被拒绝

答案 1 :(得分:0)

浏览器刷新确实正在清除 cachedCustomer 并重新请求信息。在更改您传递的参数时,您应该表明需要清除 cachedCustomer

您可以创建一个缓存服务,根据请求的 URL 存储客户信息。换句话说,您可以创建一个类似于hashmap的数组,该数组将信息存储为值,并使用 URL 作为键。虽然我不建议在你的数据被改变时(在后端)很多。

答案 2 :(得分:0)

尝试使用

$route.reload();

请在您的控制器中注入$ route