Я довольно новичок в Angular, поэтому, возможно, я прошу невозможного, но в любом случае, вот мой вызов.Решение для потоковой передачи JSON с использованием oboe.js в AngularJS?
Поскольку наш сервер не может разбивать на страницы данные JSON, я хотел бы передать JSON и добавить его по страницам в модель контроллера. Пользователю не нужно дожидаться загрузки всего потока, поэтому я обновляю представление для каждой записи X (для страниц).
Я нашел oboe.js для разбора потока JSON и добавил его с помощью беседки к моему проекту. (bower install oboe --save).
Я хочу обновить модель контроллера во время потоковой передачи. Я не использовал реализацию qq pomises $ q, потому что существует только один .resolve (...), и я хочу, чтобы несколько страниц данных загружались через поток, поэтому $ digest нужно вызывать с каждой страницы. Успокоительная служба, называется это/сервис/задачи/поиск
Я создал фабрику с функцией поиска, которую я называю внутри контроллера:
'use strict';
angular.module('myStreamingApp')
.factory('Stream', function() {
return {
search: function(schema, scope) {
var loaded = 0;
var pagesize = 100;
// JSON streaming parser oboe.js
oboe({
url: '/service/' + schema + '/search'
})
// process every node which has a schema
.node('{schema}', function(rec) {
// push the record to the model data
scope.data.push(rec);
loaded++;
// if there is another page received then refresh the view
if (loaded % pagesize === 0) {
scope.$digest();
}
})
.fail(function(err) {
console.log('streaming error' + err.thrown ? (err.thrown.message):'');
})
.done(function() {
scope.$digest();
});
}
};
});
Моего контроллер:
'use strict';
angular.module('myStreamingApp')
.controller('MyCtrl', function($scope, Stream) {
$scope.data = [];
Stream.search('tasks', $scope);
});
Это все швы для работы. Через некоторое время система замедляется, и http-вызов не завершается после обновления браузера. Кроме того, браузер (хром) выходит из строя, когда загружено слишком много записей. Возможно, я ошибаюсь, потому что передача области функции поиска на заводе не «правильна», и я подозреваю, что вызов $ digest в этой области дает мне проблемы. Любые идеи по этому вопросу приветствуются. Особенно, если у вас есть идея о его реализации, где завод (или услуга) может вернуть обещание, и я мог бы использовать
$scope.data = Stream.search('tasks');
в контроллере.