2013-08-14 7 views
8

のngのクリックイベント内で期待したものではありません。AngularJS - 適用範囲が、私はこのコードスニペット持っNGリピート

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

を私は理由を理解していない:

alert($scope.message.text); 

は動作しません。 ng-repeatが新しいスコープを作っていると思った。

答えて

13

その真実はng-repeatです。新しいスコープが作成されます。しかし、コントローラの中で$ scopeを実行すると、そのスコープにアクセスすることはできません。代わりに、以下のように行うことができます。

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

そして、あなたのJSでの:

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

ご返信ありがとうございます。この現象を少し説明できますか?他のスコープの代わりにこのスコープを取得するのはなぜですか? – poiuytrez

+0

@poiuytrez $ scopeを実行することで、コントローラの 'ng-repeat'のスコープにアクセスすることはできません。代わりに、ng-repeatの中のオブジェクトをコントローラに渡すことができます:) – AlwaysALearner

-1

そのメッセージへのアクセスをビュー側(のindex.html)でのみローカル側。 Dosn、tアクセスコントローラ側。しかし、メッセージにはsend(メッセージ)という引数が渡されます。

関連する問題