2013-08-14 4 views
8

Ho questo frammento di codice:AngularJS - Ambito di applicazione non è quello che ci aspettavamo all'interno di un evento ng clic su 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); 
}; 

non capisco il motivo per cui:

alert($scope.message.text); 

non funziona. Ho pensato che ng-repeat stava creando un nuovo ambito.

risposta

13

È vero che ng-repeat crea un nuovo ambito. Ma non puoi accedere a quell'ambito facendo $ scope all'interno del tuo controller. Invece si può fare come di seguito:

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

e nel tuo JS:

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

Grazie per la tua risposta veloce. Potresti spiegare un po 'questo comportamento? Perché ottengo questo ambito anziché l'altro ambito? – poiuytrez

+0

@poiuytrez Non è possibile accedere all'ambito di 'ng-repeat' all'interno del controller facendo $ scope. Invece puoi passare l'oggetto dall'interno di ng-repeat al controller :) – AlwaysALearner

-1

Tale accesso messaggio unico lato locale che è vista laterale (index.html). Dosn, t access controller side. Ma il messaggio viene passato agli argomenti inviati (messaggio).

Problemi correlati