2015-04-29 13 views
6

हाय मैं कुछ फुटबॉल स्कोर स्क्रैप करने के लिए import.io का उपयोग करने की कोशिश कर रहा हूं। मैं अपने जेएस को एपीआई के साथ काम करने और डेटा देने में कामयाब रहा। समस्या यह है कि यह नियंत्रक के अंदर एक निजी दायरे में होना चाहिए क्योंकि मैं उस पर एक एनजी-दोहराना नहीं कर सकता।तृतीय पक्ष लाइब्रेरी से एंगुलरजेएस स्कोप अपडेट करें एसिंक्रोनस कॉलबैक

क्या कोई मुझे बता सकता है कि क्यों, और यदि किसी के पास स्कोप पर एक अच्छी मार्गदर्शिका है जो शायद अधिक उपयोगी होगी।

latestScores.controller('ScoresController', function ($scope) { 
    $scope.pots = []; 
    var io2 = new importio("XXX", "XXXXXX[API KEY]XXXXXXXX", "import.io"); 


    io2.connect(function (connected) { 

     if (!connected) { 
      console.error("Unable to connect"); 
      return; 
     } 


     var data; 


     var callback = function (finished, message) { 

      if (message.type == "DISCONNECT") { 
       console.error("The query was cancelled as the client was disconnected"); 
      } 

      if (message.type == "MESSAGE") { 
       if (message.data.hasOwnProperty("errorType")) { 

        console.error("Got an error!", message.data); 
       } else { 
        data = message.data.results; 
       } 
      } 
      if (finished) { 

       pots = data; 
       console.log(pots); /* This gives me an object */ 
     } 
     } 
     io2.query({ 
     "connectorGuids": [ 
     "d5796d7e-186d-40a5-9603-95569ef6cbb9"], 
    }, callback); 
    }); 
    console.log($scope.pots); /* This gives me nothing */ 
}); 
+3

आप स्थानीय चर बर्तन करने के लिए डेटा asigning कर रहे हैं, $ करने के लिए यह बताए कॉलबैक में scope.pots – ecyshor

+0

स्थानीय नहीं @NicuReut कोशिश करने के लिए कोड

if (finished) { pots = data; console.log(pots); /* This gives me an object */ } 

के इस टुकड़े - बर्तन - खिड़की में वैश्विक चर है :-) – Grundy

उत्तर

2

AngularJS डेटा बाइंडिंग जब आप किसी तृतीय पक्ष पुस्तकालय से एक कॉलबैक में अपने दायरे को अद्यतन नहीं जान सकते।

अपने कॉलबैक में, इस कार्य करें:

$scope.pots = dataReceived 
$scope.$apply(); 

आप $ scope.apply बुला() को छोड़ना चाहते हैं, तो आप कोणीय खुद वादा मॉड्यूल (कहा जाता है $ क्यू) का उपयोग करें और अपने API कॉल रैप करने के लिए की जरूरत है एक सेवा।

इसके अलावा, यदि आपका एपीआई वेबसाईट आधारित है, तो आपको नियंत्रक खत्म होने पर अपने एपीआई से डिस्कनेक्ट करने के लिए $ scope.on ('$ dest') ईवेंट की सदस्यता लेनी चाहिए।

+1

धन्यवाद आदमी, हाँ मैंने पहले वादे का उपयोग किया है, लेकिन चूंकि यह एक तीसरा पक्ष मॉड्यूल था, जिस तरह से मुझे फेंक दिया। – craigie2204

1

एनजी-दोहराना इसका अपना दायरा है। अपने मामले में स्थानीय चर के लिए अपना असाइन करने वाला डेटा स्कोप variabe को असाइन करने के बजाय।

परिवर्तन

if (finished) { 

       $scope.pots = data; 
       console.log($scope.pots); /* This gives me an object */ 
     } 
संबंधित मुद्दे