每次打开页面时都会加载AngularJS加载服务

时间:2015-01-19 10:22:23

标签: javascript angularjs

我正在收件箱中加载一个邮件列表,列表中最近的5条消息。 我无法刷新页面,以便页面始终显示列表中的最新5条消息。

消息页面在第一次打开时才调用该服务。我该如何回忆这项服务?对于像user这样的其他服务,我一直使用$ interval来更新$ scope.data

每次打开服务都可以召回服务吗?

模板

<div class="list">
  <ul ng-controller="MessagesCtrl">
    <li ng-repeat="message in messages.data" id="message{{message.id}}"  class="item">
        <a href="#" class="messageIcon">{{message.user}}</a>  
  <p>{{message.title}}</p><a ng-click="deleteItem($index)">x</a>
    </li>
</ul>

服务

angular
    .module('starter.controllers', [])
    .factory("Messages", function() {
        var Messages = {};
        return {
            getData: function($http) {
                return $http.get("http://website.com/index.php/id/user/get_message/i").
                success(function(response) {
                    /// console.log(JSON.stringify(response));
                    Messages.data = response.data;
                    return Messages;
                }).error(function(data, status, headers, config) {
                    // log error
                });
            }
        }
    });

控制器

angular
    .module('starter.controllers', [])
    .controller('MessagesCtrl', function($scope, Messages, $http) {

    Messages
        .getData($http)
        .then(function(data) {
            $scope.messages = data;
        });
});

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作之一:

1)定期使用服务中的$ interval轮询getdata函数。然后在控制器中的$ scope.messages上编写一个监视,每次值发生变化时,UI都会更新。

2)使用websocket始终保持数据的实时性。我不确定这将是最简单的选择。根据您期望的流量,甚至可能无法扩展。

如果你不熟练使用websockets,我个人会选择第一个选项。