从存储在文件中的列表中访问单个元素

时间:2015-10-09 19:40:30

标签: angularjs controller

我有一个移动应用程序的缓存机制,它使用AngularJS从服务器下载大量JSON数据;由于数据的大小我只在一个纯文本文件中存储JSON.stringify - ied版本,因为它太大而不适合localStorage。

我想知道从不同的视图控制器访问此数据的各个元素的最佳方法,而不是从所选的每个故障单读取文件,并从文件列表中查找故障单?

E.g。我的Comms服务以最简单的形式显示:

angular.module('app.core')
    .service('Comms', function($q, $http, Storage) {
        this.getTickets = function () {
            var defer = $q.deferred();

            // try to read from Tickets
            Storage.getFile('Tickets')
                .then(function (data) {
                    // file found
                    $q.resolve(data);
                }, function (err) {
                    // file NOT found - download (storage handled elsewhere)
                    // Stored in a file named 'Tickets', as above.
                    $http.get('https://myurl.com/getTickets');
                })
                .then(function (tickets) {
                    $q.resolve(data);
                })
                .catch(function (err) {
                    // something wrong happened
                });
        };
    });

TicketsController

angular.module('mpro.core')
    .controller('TicketsController', function($scope, Comms) {
        $scope.tickets = [];

        Comms.getTickets()
            .then(function (tickets) {
                $scope.tickets = tickets;
            });
    });

我有ng-repeat显示所有这些票证,但不太确定如何提取单个票证,以便在我的TicketController中显示一些票证信息。

E.g。门票清单:

<div ng-repeat="ticket in tickets">
    <a href="#/tickets/{{ticket.TicketID}}">
        <h1>{{ticket.TicketNumber}}</h1>
        <label>Name: </label>{{ticket.ContactName}}
    </a>
</div>

个人票证视图:

<div ng-controller="TicketController">
    <h1>{{ticket.TicketNumber}}</h1>
</div>

最后,TicketController:

angular.module('mpro.core')
    .controller('TicketController', function($scope, $stateParams) {
        $scope.ticket = ... // stuck here
    });

我不确定如何提取个人票;我可以读取每个按下的票据的文件并搜索列表 - 但这非常低效。

我无法在控制器/路由之间传递对象吗?我无法对我的票证进行字符串化并通过参数传递它,因为对象的大小可能会增大。

只是想知道通过AngularJS做到这一点的最佳机制是什么?

1 个答案:

答案 0 :(得分:1)

您可以使用$rootScope查看reference

示例:

 angular.module('eventExample', [])
  .controller('EventController', ['$rootScope', function($rootScope) {
   $rootScope.count = 0;
   }]);