2013-08-14 4 views
8

ich diesen Code-Schnipsel haben:AngularJS - Scope ist nicht das, was im Inneren eines ng Sie auf erwartete Ereignis von 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); 
}; 

Ich verstehe nicht, warum:

alert($scope.message.text); 

funktioniert nicht. Ich dachte, dass ng-repeat einen neuen Bereich schaffen würde.

Antwort

13

Es ist wahr, dass ng-repeat einen neuen Bereich erstellt. Sie können jedoch nicht auf diesen Bereich zugreifen, indem Sie in Ihrem Controller $ scope ausführen. Stattdessen können Sie wie unten tun:

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

Und in Ihrem JS:

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

Vielen Dank für Ihre schnelle Antwort. Könntest du ein bisschen dieses Verhalten erklären? Warum bekomme ich diesen Bereich anstelle des anderen Bereichs? – poiuytrez

+0

@poiuytrez Sie können nicht auf den Bereich von 'ng-repeat' innerhalb des Controllers zugreifen, indem Sie $ scope ausführen. Stattdessen können Sie das Objekt von innerhalb ng-wiederholen, um den Controller zu übertragen :) – AlwaysALearner

-1

, die Message nur lokalen Zugang zur Seite, die Ansicht Seite (index.html). Dos, t Zugriff Controller-Seite. Aber Nachricht ist übergeben Argumente, die gesendet wird (Nachricht).