मैं एक छोटा कोणीय वेब एप्लिकेशन लिख रहा हूं और डेटा लोड करने की स्थिति में समस्याएं चलाता हूं। मैं फायरबेस को डेटासोर्स के रूप में उपयोग कर रहा हूं और एंगुलरफायर प्रोजेक्ट मिला जो अच्छा लगा। हालांकि, मुझे डेटा प्रदर्शित होने के तरीके को नियंत्रित करने में परेशानी हो रही है।angularfireCollection: पता है कि डेटा पूरी तरह से लोड होने पर
सबसे पहले मैं ऐसा करके नियमित रूप से निहित तुल्यकालन उपयोग करने की कोशिश:
angularFire(ref, $scope, 'items');
यह ठीक काम किया है और जब मैं मेरे विचार में मॉडल $ आइटम इस्तेमाल किया सभी डेटा प्रदर्शित किया गया था। हालांकि, जब डेटा फ़ायरबेस डेटा स्रोत से आ रहा है, तो इसे स्वरूपित करने के तरीके में स्वरूपित नहीं किया गया है, इसलिए मुझे प्रदर्शित होने से पहले डेटा में कुछ अतिरिक्त संरचनात्मक परिवर्तन करने की आवश्यकता है। समस्या यह है कि, मुझे नहीं पता होगा कि डेटा पूरी तरह से लोड हो गया है। मैंने $ वस्तुओं को $ घड़ी सौंपने का प्रयास किया, लेकिन इसे बहुत जल्दी कहा जाता था।
तो, मैं पर चले गए और इसके बजाय angularfireCollection का उपयोग करने की कोशिश की:
$scope.items = angularFireCollection(new Firebase(url), optionalCallbackOnInitialLoad);
प्रलेखन काफी स्पष्ट है कि "optionalCallbackOnInitialLoad" नहीं करता है और जब यह कहा जाता है, लेकिन पहले आइटम तक पहुंचने की कोशिश कर रहा $ आइटम संग्रह में एक त्रुटि फेंक जाएगी ("अनकही टाइप त्रुटि: अपरिभाषित की संपत्ति '0' नहीं पढ़ी जा सकती है)।
मैं एक बटन जोड़ने की कोशिश की और बटन के क्लिक हैंडलर में मैं $ मदों में पहले आइटम की सामग्री को लॉग इन किया है, और यह काम किया:
console.log($scope.items[0]);
इसमें किया गया था! मेरे फायरबेस से पहली वस्तु किसी भी त्रुटि के बिना प्रदर्शित की गई थी ... केवल समस्या यह है कि मुझे वहां जाने के लिए एक बटन क्लिक करना पड़ा।
तो, किसी को भी मैं कैसे पता कर सकते हैं पता है जब सभी डेटा लोड किया गया है और तो एक $ गुंजाइश चर के लिए असाइन करें मेरे विचार में प्रदर्शित करने के लिए? क्या कोई और तरीका है?
मेरे नियंत्रक:
app.controller('MyController', ['$scope', 'angularFireCollection',
function MyController($scope, angularFireCollection) {
$scope.start = function()
{
var ref = new Firebase('https://url.firebaseio.com/days');
console.log("start");
console.log("before load?");
$scope.items = angularFireCollection(ref, function()
{
console.log("loaded?");
console.log($scope.items[0]); //undefined
});
console.log("start() out");
};
$scope.start();
//wait for changes
$scope.$watch('items', function() {
console.log("items watch");
console.log($scope.items[0]); //undefined
});
$scope.testData = function()
{
console.log($scope.items[0].properties); //not undefined
};
}
]);
मेरा विचार:
<button ng-click="testData()">Is the data loaded yet?</button>
अग्रिम धन्यवाद!
इस प्रयास करें। आइटम [0]); }); –