2013-02-21 29 views
19

में सुलभ नहीं है मैं भी नियंत्रक में एक सेवाचर angular.forEach

app.service('myService', function() { 
    this.list = []; 
    this.execute = function() { 
     //this.list is reachable here 
     angular.forEach(AnArrayHere, function(val, key) { 
      //this.list is not reachable here 
     }); 
    } 
} 

है इसके सुलभ

function Ctrl($scope, myService) { 
    $scope.list = myService.list; 
} 

कोई मुझे बता सकते हैं क्यों "this.list" कोणीय भीतर पहुंच योग्य नहीं है .foreach और मैं "this.list" तक कैसे पहुंच सकता हूं?

उत्तर

44

angular.forEach में अंतिम पैरामीटर (http://docs.angularjs.org/api/angular.forEach देखें) फ़ंक्शन this का संदर्भ है। तो अगर आप कुछ इस तरह करना चाहेंगे:

app.service('myService', function() { 

    this.list = []; 

    this.execute = function() { 

     //this.list is reachable here 

     angular.forEach(AnArrayHere, function(val, key) { 
      //access this.list 
     }, this); 

    } 
} 
+0

धन्यवाद, यह काम करता है, सीखने के लिए हमेशा कुछ होता है। मैंने सोचा कि मैं पहले से ही कोणीय-डॉक्स से सबकुछ जानता हूं। –

+1

धन्यवाद, कोणीय दस्तावेज़ों में लूप में स्कोप चर को इंजेक्ट करने के बारे में कुछ नहीं था। – Churk

+0

धन्यवाद, यह काम करता है;) –

3

कारण this.list foreach में सुलभ नहीं है क्योंकि उस समारोह कॉल के लिए संदर्भ बदल गया है। यह execute विधि के अंदर काम करता है क्योंकि यह विधि सूची के समान संदर्भ का हिस्सा है।

सभी बंद होने के कारण मैं this संदर्भ को दूसरे चर के संदर्भ में निर्दिष्ट करता हूं जिसे आप बाद में कॉल कर सकते हैं। कुछ इस तरह:

app.service('myService', function() { 

    var self = this; 
    self.list = []; 

    self.execute = function() { 
     //this.list and self.list are reachable here 
     angular.forEach(AnArrayHere, function(val, key) { 
      //self.this == this.list 
     }); 
    } 
} 

यह foreach विधि कॉल के हिस्से के रूप संदर्भ गुजर की तुलना में ज्यादा सामान्य समाधान है और अन्य बंद संबंधित स्थितियों में काम करेगा।

+0

धन्यवाद, यह भी काम करता है। –