2014-12-08 7 views
11

क्या मुझे $$ द्वारा अपडेट किया गया क्या प्राप्त हो सकता है या $$ अपडेट किया गया एक फ़ंक्शन चलाया जा सकता है जिसे मैं हर बार कार्य की जांच से प्राप्त कर सकता हूं?

दिन के अंत में, मुझे इस बात की गिनती रखने की आवश्यकता है कि उपयोगकर्ता कितने कार्य पूरा करते हैं। ऐसा लगता है कि फायरबेस के पास उस डेटा को स्वचालित रूप से समन्वयित करने के तरीके हैं लेकिन यह स्पष्ट नहीं है कि यह विशेष रूप से कैसे करें। जब कोई कार्य पूरा हो जाता है तो मैंने $ घड़ी और चलने वाले कार्यों के साथ समस्याओं में भाग लिया है। यह ऐसा करने का एक दिलचस्प तरीका है लेकिन मैं टुकड़ों को एक साथ नहीं रख सकता। http://plnkr.co/edit/iAGvPHFWn2GSPGzBRpKh?p=preview

// Code goes here 
angular.module('app', ['firebase']); 

angular 
    .module('app') 
    .controller('main', function($scope, $firebase, $timeout, $window, ListWithTotal) { 

    var ref = new Firebase("https://plnkr.firebaseio.com"); 
    $scope.listWithTotal = ListWithTotal(ref); 

    $scope.addTask = function(task) { 
    $scope.listWithTotal.$add({ 
     title: task.title, 
     complete: false, 
     tally: 0 
    }); 
    task.title = ''; 
    }; 

    $scope.completeTask = function(task) { 
    if (task.complete === true) { 
     task.complete = true; 
     task.tally = 1; 
    } else { 
     task.complete = false; 
     task.tally = 0; 
    } 
    $scope.listWithTotal.$save(task); 
    }; 

    $scope.tallyCount = ''; 
    //it would be cool if I can get tallyCount to receive 
    //the result of getTotal or automagically with $$updated. 


}).factory("ListWithTotal", ["$FirebaseArray", "$firebase", function($FirebaseArray, $firebase) { 
    // create a new factory based on $FirebaseArray 
    var TotalFactory = $FirebaseArray.$extendFactory({ 
    getTotal: function() { 
     var total = 0; 
     angular.forEach(this.$list, function(rec) { 
     total += rec.tally; 
     }); 
     return total; 
    }, 
    $$updated: function(){ 
     return this.$list.getTotal(); 
    } 
    }); 
    return function(listRef) { 
    var sync = $firebase(listRef, {arrayFactory: TotalFactory}); 
    return sync.$asArray(); // this will be an instance of TotalFactory 
    }; 
}]); 

उत्तर

6

आप सभी पूर्ण हो चुके कार्यों का एक अप-टू-डेट संख्या चाहते हैं, आप बिंदु जहाँ आप काम को बचाने के लिए एक then जोड़ सकते हैं:

यहाँ नीचे कोड की plnkr काम कर रहा है: के बाद कार्य को बचाया और वर्तमान क्षेत्र को पूर्ण हो चुके कार्यों का मिलान कहते है

$scope.listWithTotal.$save(task).then(function() { 
    $scope.tallyCount = $scope.listWithTotal.getTotal(); 
}); 

then ब्लॉक निष्पादित करता है।

+0

उत्तर के लिए धन्यवाद। इस तरह मैं इसे अब कर रहा हूं। इस कार्यक्षमता को सीधे सरणी में बांधने का एक तरीका होना चाहिए ताकि जब भी कोई कार्य जोड़ा/हटाया/बदला जाए तो अद्यतन स्वचालित रूप से सर्वर/स्थानीय रूप से होता है। यही वह है जिसे मैं समझने की कोशिश कर रहा हूं। – EmptyPockets

+0

यह सुनिश्चित नहीं है कि यह वही है जो आप खोज रहे हैं, लेकिन दृश्य में यह बाध्यकारी काम करता है: 'पूर्ण गणना: {{listWithTotal.getTotal()}} ' –

+0

यह काम करेगा (शायद, मेरे मामले में मेरे पास एक श्रृंखला है उपयोगकर्ता लेकिन यह असंबंधित है) लेकिन मैं देखना चाहता हूं कि मैं $$ अपडेट किए गए फ़ंक्शन को ओवरराइट करके इसे कर सकता हूं या नहीं। ऐसा लगता है कि $ firebase सरणी के अंदर वह कार्यक्षमता क्लीनर और बनाए रखने में आसान होगी। मुझे अन्य चीजों को करने की आवश्यकता होगी जैसे कार्यों की प्रतियां बनाना और उन्हें विभिन्न सूचियों आदि में ले जाना। – EmptyPockets

संबंधित मुद्दे

 संबंधित मुद्दे