मैं कोणीय के लिए काफी नया हूं इसलिए शायद मैं असंभव पूछ रहा हूं लेकिन वैसे भी, यह मेरी चुनौती है।AngularJS में oboe.js का उपयोग कर JSON स्ट्रीमिंग के लिए एक समाधान?
चूंकि हमारा सर्वर जेएसओएन डेटा को पैगनेट नहीं कर सकता है, इसलिए मैं JSON स्ट्रीम करना चाहता हूं और इसे पृष्ठ द्वारा नियंत्रक के मॉडल में पृष्ठ जोड़ना चाहता हूं। उपयोगकर्ता को पूरी स्ट्रीम लोड होने की प्रतीक्षा नहीं करनी है, इसलिए मैं प्रत्येक एक्स (पेजसाइज) रिकॉर्ड्स के लिए दृश्य को रीफ्रेश करता हूं।
मुझे JSON स्ट्रीम को पार्स करने के लिए oboe.js मिला और इसे मेरे प्रोजेक्ट में बॉवर का उपयोग करके जोड़ा। (बॉवर इंस्टॉल ओबो - सेव)।
मैं स्ट्रीमिंग के दौरान नियंत्रक मॉडल को अपडेट करना चाहता हूं। मैंने pomises के $ q कार्यान्वयन का उपयोग नहीं किया, क्योंकि केवल एक ही है .resolve (...) संभव है और मैं स्ट्रीम के माध्यम से लोड किए गए डेटा के कई पेज चाहता हूं ताकि प्रत्येक पृष्ठ के साथ $ पाचन को बुलाया जा सके। शोकहारा सेवा है कि कहा जाता है
है/सेवा/कार्य/खोज मैं एक खोज समारोह जो मैं नियंत्रक के भीतर से फोन के साथ एक कारखाना बनाया:
'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);
});
यह काम करने के लिए सभी seams। थोड़ी देर बाद सिस्टम धीमा हो जाता है और ब्राउज़र को रीफ्रेश करने के बाद http कॉल समाप्त नहीं होता है। जब भी बहुत सारे रिकॉर्ड लोड होते हैं तो ब्राउज़र (क्रोम) क्रैश हो जाता है। हो सकता है कि मैं गलत ट्रैक पर हूं क्योंकि फ़ैक्टरी खोज फ़ंक्शन के दायरे को पार करने से सही "अनुभव" नहीं होता है और मुझे संदेह है कि उस दायरे पर $ पाचन को कॉल करने से मुझे परेशानी हो रही है। इस विषय पर किसी भी विचार का स्वागत है। आप इसे लागू करने जहां कारखाना (या सेवा) एक वादा लौट सकते हैं और मैं नियंत्रक में
$scope.data = Stream.search('tasks');
इस्तेमाल कर सकते हैं पर एक विचार है, खासकर अगर।