2013-08-14 18 views
8

Tôi có đoạn mã này:AngularJS - Phạm vi không phải là những gì mong đợi trong một sự kiện ng-click của ng-repeat

<ul> 
    <li ng-repeat="message in messages"> 
     <button ng-click="send()">Send</button> 
    </li> 
</ul> 

$scope.send = function(){ 
    // not working (message undefined) 
    alert($scope.message.text); 
    // working 
    alert($scope.messages[0].text); 
}; 

Tôi không hiểu tại sao:

alert($scope.message.text); 

không hoạt động. Tôi nghĩ rằng ng-lặp lại đã tạo ra một phạm vi mới.

Trả lời

13

Đúng là ng-repeat tạo phạm vi mới. Nhưng bạn không thể truy cập phạm vi đó bằng cách thực hiện $ scope bên trong controller của bạn. Thay vào đó bạn có thể làm như sau:

<button ng-click="send(message)">Send</button> 

Và trong JS của bạn:

$scope.send = function(message){  
    alert(message.text);  
}; 
+0

Cảm ơn bạn đã trả lời nhanh chóng. Bạn có thể giải thích một chút về hành vi này không? Tại sao tôi nhận phạm vi này thay vì phạm vi khác? – poiuytrez

+0

@poiuytrez Bạn không thể truy cập phạm vi 'ng-repeat' bên trong bộ điều khiển bằng cách thực hiện phạm vi $. Thay vào đó bạn có thể truyền đối tượng từ bên trong ng-repeat tới controller :) – AlwaysALearner

-1

Đó truy cập tin nhắn chỉ phía địa phương có nghĩa là xem bên (index.html). Dosn, t điều khiển truy cập bên. Nhưng thông điệp được truyền qua các đối số gửi (tin nhắn).

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