2013-02-21 37 views
19

Tôi có một dịch vụbiến là không thể truy cập trong 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 
     }); 
    } 
} 

ngay cả trong điều khiển của nó truy cập

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

Ai đó có thể giải thích cho tôi tại sao "this.list" là không thể truy cập trong góc .foreach và làm cách nào tôi có thể truy cập vào "this.list"?

Trả lời

44

Tham số cuối cùng trong hàm angular.forEach (Xem http://docs.angularjs.org/api/angular.forEach) là ngữ cảnh cho this. Vì vậy, bạn sẽ muốn một cái gì đó như thế này:

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

Cảm ơn bạn, nó hoạt động, luôn luôn có một cái gì đó để tìm hiểu. Tôi nghĩ tôi đã biết mọi thứ từ Angular-Docs. –

+1

Cảm ơn, tài liệu góc không có gì về cách tiêm biến phạm vi vào vòng lặp. – Churk

+0

Cảm ơn, nó hoạt động;) –

3

Lý do this.list không thể truy cập được vì lý do cho cuộc gọi chức năng đó đã thay đổi. Nó hoạt động bên trong phương thức execute vì phương thức đó là một phần của cùng một ngữ cảnh với danh sách.

Do tất cả các đóng, tôi sẽ gán ngữ cảnh this cho biến khác mà bạn có thể gọi sau này. Một cái gì đó như thế này:

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 
     }); 
    } 
} 

Đây là một giải pháp tổng quát hơn một chút so với ngữ cảnh như một phần của cuộc gọi phương thức foreach và sẽ hoạt động trong các tình huống liên quan đến đóng cửa khác.

+0

Cảm ơn bạn, điều này cũng hoạt động. –

Các vấn đề liên quan