2013-08-14 31 views
8

bir ng tıklama olayı içinde beklenmiyor budur:angularjs - Kapsam Bu kod parçacığını sahip ng-tekrarı

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

Nedenini anlamıyorum:

alert($scope.message.text); 

çalışmaz. Ben ng-tekrarı yeni bir kapsam oluşturduğunu düşündüm.

cevap

13

Bu doğru ng-repeat yeni bir kapsam oluşturur. Ancak, kontrol cihazınızın içinde $ kapsamı oluşturarak o kapsama erişemezsiniz. Bunun yerine aşağıdaki gibi yapabilirsiniz:

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

Ve JS:

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

Hızlı cevabınız için teşekkür ederiz. Bu davranışı biraz açıklayabilir misiniz? Neden diğer kapsam yerine bu kapsamı alıyorum? – poiuytrez

+0

@poiuytrez Denetleyici içindeki "ng-repeat" kapsamına $ kapsamı üzerinden erişemezsiniz. Bunun yerine nesneyi ng-tekrardan denetleyiciye geçirebilirsiniz :) – AlwaysALearner

-1

O İleti erişimi görünümü tarafı (index.html) sadece lokal yan. Doz, t erişim denetleyicisi tarafı. Ancak mesaj, gönderilen (mesaj) argümanlardan geçirilir.

İlgili konular