2013-04-26 3 views
9

मेरे पास नियंत्रक.जेएस और कारखानों.जेएस के साथ एक कोणीय जेएस एप्लीकेशन है।कोणीय जेएस नियंत्रक प्रतिक्रिया के लिए प्रतीक्षा करें (या कॉलबैक सेट करें)

मुझे क्या पसंद है नियंत्रक (जो मुझे कारखानों से मिलता है) में मूल्यों के साथ कुछ करना है। मेरी समस्या यह है कि जब मैं उन्हें एक्सेस करता हूं तो ये मान खाली होते हैं।

मैं प्रतिक्रिया के लिए कैसे प्रतीक्षा कर सकता हूं? या मैं कॉलबैक कहां जोड़ सकता हूं?

Flashcards.controller('CardDeckDetailController', function($scope, $routeParams, CardDeckService, CardService) { 
    $scope.carddeck = CardDeckService.findCardDeckByID($routeParams.cardDeckID); 
    $scope.cards = CardService.findCardsByCardDeckID($routeParams.cardDeckID); 
    $scope.card = $scope.cards[0]; 
    $scope.cardLength = $scope.cards.length; 

}); 

    Flashcards.factory('CardDeckService', function($resource) { 
    var cardDeckService = $resource('/FlashcardsServer/rest/carddecks/:cardDeckID', {}, {}); 

    cardDeckService.findAllCardDecks = function() { 
     return cardDeckService.query(); 
    }; 

    cardDeckService.findCardDeckByID = function(id) { 
     return cardDeckService.get({ cardDeckID : id }); 
    }; 

    return cardDeckService; 
}); 

मैं क्या पसंद पहली कार पाने के लिए है ($ scope.cards [0]) और $ scope.card के तहत इसे सहेजें। लेकिन यह हमेशा खाली (कार्ड लम्बाई के साथ ही)।

दूसरी ओर यदि मैं आंशिक दृश्य से (कार्ड। लम्बाई) के आकार को प्रिंट करता हूं, तो मुझे सही मान मिलता है। ।

स्वागत करती है और धन्यवाद मार्क

+0

[कोणीय जेएस: वादे से बांधने के लिए कैसे] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/13033118/angular-js-how-to-bind-to-promises) – lucuma

+0

@ लुकामा: $ के साथ संसाधन सेवा यह एक अलग समस्या है – Guillaume86

+0

आप अभी भी संसाधन के साथ वादे वापस कर सकते हैं हालांकि यह थोड़ा अलग है। यहां एक उदाहरण दिया गया है: http://beta.plnkr.co/edit/ZXGdN3eRP2yabYILeDay?पी = पूर्वावलोकन – lucuma

उत्तर

6

आप मूल्य पर पहुंचकर वादा वापस पाने के $ तो (स्रोत कोड के लिए जाना पड़ता है खोजने के लिए कि) कर सकते हैं:

Flashcards.controller('CardDeckDetailController', function($scope, $routeParams, CardDeckService, CardService) { 
$scope.carddeck = CardDeckService.findCardDeckByID($routeParams.cardDeckID); 
$scope.cards = CardService.findCardsByCardDeckID($routeParams.cardDeckID); 
$scope.card = $scope.cards.$then(function(){ return $scope.cards[0]; }); 
$scope.cardLength = $scope.cards.$then(function(){ return $scope.cards.length; }); 

संपादित करें: $ तो वापसी http प्रतिक्रिया

+0

हाय Guilllaume। विचार के लिए धन्यवाद। लेकिन यह काम नहीं करता है। मुझे संदेश "अपरिभाषित नहीं किया जा सकता" $ – mooonli

+0

ऐसा लगता है कि आपके कार्ड सेवा में कोई बग है, तो इसे अपरिभाषित नहीं किया जा सकता है, $ संसाधन किसी ऑब्जेक्ट को वापस लौटाता है और जब प्रतिक्रिया होती है तो इसे हाइड्रेट करें – Guillaume86

+0

या आप सेवा:: \t cardDeckService.findAllCardDecks = function() { \t \t वापसी cardDeckService.query(); गलत वर्तनी लाइन में संपत्ति आप $ तो मेरे पास है निम्नलिखित लाइनों फोन – Guillaume86

3

जैसा कि लुकुमा सुझाव देता है, इसे शायद एक वादे के साथ संभाला जा सकता है। http://api.jquery.com/promise/ jQuery वादा http://docs.angularjs.org/api/ng.$q कोणीय वादा के लिए jQuery वादा

इस जवाब से अधिक प्रश्नों के लिए एक ऐसी ही समाधान AngularJS - wait for multiple resource queries to complete

तो बजाय

cardDeckService.findCardDeckByID = function(id) { 
    return cardDeckService.get({ cardDeckID : id }); 
}; 

उपयोग पूरा करने के लिए है पर आधारित है

cardDeckService.findCardDeckbyID = function(id){ 
    var d = $q.defer(); 
    var result = cardDeckService.get(id, function() { 
     $scope.card = $scope.cards[0]; 
     d.resolve(result); 
    }); 
    return d.promise; 
} 

यदि आप प्रयुक्त वादे का इस्तेमाल करते हैं, तो वे "कॉलबैक"

करने के लिए एक बेहतर तरीका है, तो एक गीथब चेकइन में $ का उल्लेख है, लेकिन मैंने कोणीय दस्तावेज़ साइट पर कुछ भी देखा है। शायद यह अब वादों

+0

हाय एंटोन। आपकी सहायता के लिए धन्यवाद. तो फिर मैं इस तरह नियंत्रक पर परिणाम कैसे प्राप्त कर सकता हूं? मैं नियंत्रक के भीतर कॉलबैक को कार्यान्वित करना चाहता हूं और इसे सर्वोपरि के रूप में सेवा में भेजना चाहता हूं। – mooonli

0

मैं पिछले कुछ दिनों में एक ही समस्या थी संभाल करने में शामिल है और मैं इसे इस तरह से हल:

cardDeckService.findCardDeckByID = function(id) { 
     var toReturn = new Object(); 
     var something = cardDeckService.get({ cardDeckID : id }, function(){ 
      toReturn = something; 
     }); 
     return toReturn; 
    }; 

आप पहली बार एक खाली वस्तु (लेकिन नहीं कुछ है कि कि "अपरिभाषित लौट ")। जब डीबी कॉल समाप्त होता है AngularJS स्वचालित रूप से ऑब्जेक्ट toReturn अद्यतन करता है। इसके अलावा आपका विचार (यदि यह नियंत्रक से जुड़ा हुआ है) अपडेट किया जाएगा।

समस्या, अपना रास्ता, यह है कि findCardDeckByIDundefined मान देता है। तो, $scope.card अपरिभाषित है और इसे स्वचालित रूप से अपडेट नहीं किया जाएगा। इसलिए, आपका विचार भी अपडेट नहीं किया जाएगा।

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