2014-06-22 19 views
6

Vì vậy, nói rằng tôi có một biến $scope được xác định như sau:

$scope.data = { 
    filter: { 
     state: 'WA', 
     country: 'US' 
    } 
}; 

Làm thế nào để truy cập vào đó trong một dịch vụ riêng biệt bởi chuỗi? ví dụ. data.filter trong ngữ cảnh của $scope.

Vì vậy, nói rằng tôi có một phương pháp dịch vụ như vậy:

function doSomething($scope, variableName) { 
    // I want to access $scope[variableName] here?? 
} 

tôi sẽ gọi nó là từ bộ điều khiển như vậy:

service.doSomething($scope, 'data.filter'); 

Trả lời

17

Bạn sẽ muốn sử dụng $eval:

function doSomething($scope, variable) { 
    var data = $scope.$eval(variable); 

    // this logs {state: "WA", country: "US"} 
    console.log(data); 
} 

Tuy nhiên, nếu bạn muốn thực hiện một số chức năng mỗi khi nội dung thay đổi, nó sẽ là tiền tố erable sử dụng $watch

function doSomething($scope, variable) { 
    $scope.$watch(variable, function(data) { 
    // this logs {state: "WA", country: "US"} 
    console.log(data); 
    }); 
} 
+0

Tôi thực sự muốn làm một 'angular.forEach' vào loại quà, vì vậy tôi sử dụng '$ eval' và nó có vẻ hoạt động? Và vấn đề với điều đó? – Sam

+1

Làm thế nào để tôi quên việc sử dụng $ parse thay vì $ eval. Có, eval hoạt động hoàn toàn tốt. Nếu bạn nhìn vào mã nội bộ, bạn sẽ thấy rằng $ eval chỉ là $ parse, tự động sử dụng $ scope như context: 'return $ parse (expr) (this, local);' Tôi sẽ cập nhật với $ eval. –

+0

Vì các dịch vụ đơn lẻ trong góc cạnh, phải rất cẩn thận khi chuyển các phạm vi đến các dịch vụ vì dịch vụ có thể giữ tham chiếu và phạm vi có thể không bị hủy. – Chandermani

-1

Bạn có thể truy cập vào biến với String qua đoạn này

var objAddress=variableName.split('.'); 
var yourVar=$scope.$eval(objAddress[0])[objAddress[1]]; 
+0

Đây là câu trả lời, không phải là câu hỏi! –

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