2013-07-17 11 views
5

मुझे अंगुलरजेएस में कई स्रोतों से $http.get को फायर करने के बारे में एक प्रश्न है। नीचे दिया गया कोड काफी सरल है: मेरे पास $scope.test फ़ंक्शन है जो HTML में एक बटन के लिए क्लिक हैंडलर है। यह $http.get ठीक काम करता है। फिर मेरे पास $http.get है जो सर्वर से कुछ डेटा प्राप्त करता है और मूल प्राइमेटिव्स चार्ट बनाता है। बहुत सरल और यह भी काम करता है। और फिर, मैं प्रत्येक चार्ट नोड और बटन हैंडलर पर बटन जोड़ना चाहता हूं, मैं एक और $http.get कॉल निष्पादित करना चाहता हूं। लेकिन यह काम नहीं करता है! मैं इस चार्ट (निर्देश, अलग टेम्पलेट और नियंत्रक, ...) लेकिन कुछ भी काम करता है बनाने के संयोजन का एक बहुत कोशिश की

$scope.test = function() { 
    console.log('Klic na ID 1'); 
    $scope.commonController.getData('orgunit/1?jsonDepth=3') 
     .success(function(workpositionData,status,headers,config) { 
      console.log('Klic na ID 1 OK'); 
      $scope.workPositions = workpositionData.workPositions; 
     }).error(function(data,status,headers,config) { 
      commonController.error('Pri branju delovnih mest je prišlo do napake: '+data.description); 
     }); 
}; 


var options = new primitives.orgdiagram.Config();  
var itemB, itemC, itemD, itemE; 
var rootItem = new primitives.orgdiagram.ItemConfig(); 

options.rootItem = rootItem; 
options.cursorItem = rootItem; 
options.hasSelectorCheckbox = primitives.common.Enabled.True; 

var buttons = []; 
buttons.push(new primitives.orgdiagram.ButtonConfig("add", "ui-icon-folder-open", "Add0"));  
options.buttons = buttons; 

options.onButtonClick = function (e, data) { 
    console.log('Klic na ID '+data.context.id); 
    $http.get('proxy/api/orgunit/' + data.context.id + '?jsonDepth=3') 
    .success(function(workpositionData,status,headers,config) { 
     console.log('Klic na ID '+data.context.id + ' OK'); 
     $scope.workPositions = workpositionData.workPositions; 
    }).error(function(data,status,headers,config) { 
     commonController.error('Pri branju delovnih mest je prišlo do napake: '+data.description); 
    });     
}; 

$http.get('proxy/api/orgunit/tree?jsonDepth=2') 
.success(function(orgUnitsData,status,headers,config) { 
    console.log('Reading orgunit tree ok'); 

    rootItem.title = orgUnitsData.orgUnits[0].title; 
    rootItem.description = orgUnitsData.orgUnits[0].description;   
    rootItem.id = orgUnitsData.orgUnits[0].id; 
    rootItem.hasSelectorCheckbox = false; 
    rootItem.image = "http://www.basicprimitives.com/demo/images/photos/a.png"; 

    $scope.addItems(rootItem, orgUnitsData.orgUnits[0].subordinates, 0); 
    jQuery(".basicdiagram").orgDiagram(options); 


}).error(function(data,status,headers,config) { 
    console.log('Reading orgunit not ok'); 
}); 

:

यहाँ कोड है। चार्ट नोट पर बटन से $ http.get कॉल आग नहीं है (क्रोम डेवलपर टूल्स में नेटवर्क में कुछ भी नहीं)।

लेकिन यहाँ इस interesing है: अगर मैं परीक्षण समारोह एक और समय पर अमल (एचटीएमएल बटन पर क्लिक करें), मैं चार्ट बटन से $ http.get से परीक्षण समारोह और से प्रतिक्रिया मिल। ऐसा लगता है कि चार्ट बटन से $ http.get कॉल कुछ के लिए इंतजार कर रहा है और जब यह कुछ एपर्स होता है, तो यह आग लग जाता है।

क्या किसी को पता है कि इस समस्या का समाधान क्या होगा? परिदृश्य के लिए कंसोल में आउटपुट परीक्षण को अंजाम, चार्ट बटन समारोह निष्पादित, निष्पादित परीक्षण इस तरह है (बोल्ड चार्ट बटन समारोह से सांत्वना प्रविष्टियों, परीक्षण समारोह से nonbolded हैं: ना आईडी 1 ठीक

KLIC na आईडी 1 KLIC KLIC na आईडी 4 KLIC na आईडी 1 KLIC na आईडी 1 ठीक KLIC na आईडी 4 ठीक

आप इस बारे में कोई विचार है, तो कृपया मुझे बताएँ, इस बात मुझे पागल कुछ पिछले गाड़ी चला रहा है घंटे अद्यतन

मैंने इसे समाधान के साथ हल किया, यहां https://github.com/angular/angular.js/issues/2794#issuecomment-18807158 मिला, इसलिए मैंने $ कॉल के साथ अपना कॉल फ़ंक्शन लपेट लिया। $ लागू करें।

$scope.$apply(function() { 
    console.log('Klic na ID ' + data.context.id); 
    $scope.commonController.getData('orgunit/' + data.context.id + '?jsonDepth=3') 
    .success(function(workpositionData,status,headers,config) { 
     console.log('Klic na ID ' + data.context.id + ' OK'); 
     $scope.workPositions = workpositionData.workPositions; 
    }).error(function(data,status,headers,config) { 
     commonController.error('Pri branju delovnih mest je prišlo do napake: '+data.description); 
    }); 
}); 

बेस्ट सादर

+0

दायरा डालने का प्रयास करें। –

+0

कोड में $ लागू() वास्तव में कहां है? मुझे लगता है कि $ लागू होता है() समस्या हल नहीं करेगा, क्योंकि समस्या यह है कि $ http.get फायरिंग नहीं है और न कि यूआई में परिणाम नहीं चल रहे हैं। – Sobis

+0

आपका मतलब है कि मैं प्रश्न अद्यतन में wrope? यदि हां, तो आप हमेशा सही थे, मुझे नहीं पता था कि आपका क्या मतलब है। – Sobis

उत्तर

6

कोणीय 1.1.4 से शुरू आप एक कोणीय पचाने पाश के संदर्भ में $ http कॉल करने के लिए की जरूरत है। यदि आप ऐसा नहीं करते हैं तो आप http कॉल के बाद मैन्युअल रूप से $scope.$apply(); पर कॉल कर सकते हैं। https://github.com/angular/angular.js/issues/2431#issuecomment-18566595