2013-04-26 18 views
37

मैं कोणीय में कारखाने और सेवा की अवधारणा को समझने की कोशिश कर रहा हूं। मेरे पास नियंत्रक

init(); 

    function init(){ 
     $http.post('/services', { 
      type : 'getSource', 
      ID : 'TP001' 
     }). 
     success(function(data, status) { 
      updateData(data); 
     }). 
     error(function(data, status) { 

     }); 

     console.log(contentVariable); 
    }; 
    function updateData(data){ 
     console.log(data); 
    }; 

यह कोड ठीक काम करता है। लेकिन जब मैं फैक्ट्री में $ http सेवा लेता हूं, तो मैं डेटा को वापस नियंत्रक में वापस नहीं कर पा रहा हूं।

studentApp.factory('studentSessionFactory', function($http){ 
    var factory = {}; 
    factory.getSessions = function(){ 
     $http.post('/services', { 
      type : 'getSource', 
      ID : 'TP001' 
     }). 
     success(function(data, status) { 
      return data; 
     }). 
     error(function(data, status) { 

     }); 
    }; 
    return factory; 
}); 

studentApp.controller('studentMenu',function($scope, studentSessionFactory){ 
    $scope.variableName = []; 
    init(); 
    function init(){ 
     $scope.variableName = studentSessionFactory.getSessions(); 
     console.log($scope.variableName); 
    }; 
}); 

के बाद से $ http भी नियंत्रक

उत्तर

88

अपने नियंत्रक से बाहर अपने studentSessions सेवा चलती करने के उद्देश्य चिंताओं की जुदाई को प्राप्त करने के लिए है के तहत काम करता है, कारखाने का उपयोग कर के लिए किसी भी लाभ नहीं है। आपकी सेवा का काम यह जानना है कि सर्वर से कैसे बात करें और नियंत्रक का काम व्यू डेटा और सर्वर डेटा के बीच अनुवाद करना है।

लेकिन आप अपने एसिंक्रोनस हैंडलर को भ्रमित कर रहे हैं और क्या लौट रहे हैं। नियंत्रक अभी भी सेवा जब डेटा बाद में प्राप्त होता है कि क्या करना है ...

studentApp.factory('studentSession', function($http){ 
    return { 
     getSessions: function() { 
      return $http.post('/services', { 
       type : 'getSource', 
       ID : 'TP001' 
      }); 
     } 
    }; 
}); 

studentApp.controller('studentMenu',function($scope, studentSession){ 
    $scope.variableName = []; 

    var handleSuccess = function(data, status) { 
     $scope.variableName = data; 
     console.log($scope.variableName); 
    }; 

    studentSession.getSessions().success(handleSuccess); 
}); 
+1

धन्यवाद ब्रायन। अब समझ में आता है। मुझे संपत्ति सूची 'त्रुटि के बाद एक' गायब} त्रुटि मिलती है। कारखाने में वापसी के लिए एक करीबी paranthesis जोड़ने बंद करने के बाद त्रुटि बनी हुई है। –

+0

ओकी ने पैराथेसिस भाग तय किया। अब कोड 'studentApp.factory ('studentSession', फ़ंक्शन ($ http) { वापसी { प्राप्त सत्र: फ़ंक्शन() { $ http.post ('/ सेवाएं', { प्रकार: 'getSource', लौटाएं आईडी: 'टीपी 001' }); } } }); अब त्रुटि हुई है 'त्रुटि बी एक फ़ंक्शन नहीं है'। मेरे पास बी नामक कोई फंक्शन नहीं है। इस त्रुटि को ट्रिगर करने पर कोई सुझाव? –

+0

धन्यवाद। मैं उस ब्रेस को याद किया। चूंकि "बी एक फ़ंक्शन नहीं है" के लिए, क्या आप कुछ प्रकार के कोड minification या uglification का उपयोग कर रहे हैं? –

8

पहले उत्तर महान है बताने के लिए की जरूरत है, लेकिन हो सकता है आप इस बात को समझ सकते हैं:

studentApp.factory('studentSessionFactory', function($http){ 
    var factory = {}; 

    factory.getSessions = function(){ 
     return $http.post('/services', {type :'getSource',ID :'TP001'}); 
    }; 

    return factory; 
}); 

तब:

studentApp.controller('studentMenu',function($scope, studentSessionFactory){ 
     $scope.variableName = []; 

     init(); 

     function init(){ 
      studentSessionFactory.getSessions().success(function(data, status){ 
       $scope.variableName = data; 
      }); 
      console.log($scope.variableName); 
    }; 
}); 
+0

एक अच्छा उत्तर की तरह दिखता है, लेकिन '.success' को अब बहिष्कृत कर दिया गया है ऐसा लगता है http://stackoverflow.com/questions/33531336/AngularJS-त्रुटि सफलता-है-नहीं-ए-समारोह # 33,531,521। – SharpC

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