2013-07-16 22 views
45

ng-repeat kullanarak bir grup radyo düğmesi oluşturuyorum ve ardından bir model seçildiğinde bir modeli güncellemeye çalışıyorum. Bu çalışma gibi görünmüyor.AngularJS - Model, ng-repeat tarafından üretilen radyo düğmesi seçiminde güncellenmiyor

Aynı işaretleme, radyo girişleri ng-tekrarlama tarafından üretilmenin tersine kodlandığında, düzgün çalışır.

Bu çalışır:

<input type="radio" ng-model="lunch" value="chicken" name="lunch"> 
<input type="radio" ng-model="lunch" value="beef" name="lunch"> 
<input type="radio" ng-model="lunch" value="fish" name="lunch"> 
{{lunch}} 

Bu değildir:

<input type="radio" ng-model="lunch" ng-repeat="m in meat" value="m" name="lunch">  
{{lunch}} 

hem burada gösteren jsfiddle bakınız: http://jsfiddle.net/mark_up/A2qCS/1/

Herhangi bir yardım mutluluk duyacağız.

Teşekkür

cevap

93
<div ng-controller="DynamicCtrl"> 
    <input type="radio" ng-model="$parent.lunch" ng-repeat="m in meat" 
    ng-value="m" name="lunch">  
    {{lunch}} 
</div> 

hile yapalım mı.

Anladığım kadarıyla, ng-repeat, kendi $scope. Yani, $parent $scope;'a başvurmanız gerekiyor Evet, AngularJS zor. Ayrıca value'u ng-value'a da değiştirmeniz gerekir.

+33

'$ parent' kullanmanın alternatifi, denetleyicide bir object özelliği kullanmaktır:' $ scope.selection = {lunch: 'chicken'}; HTML'de: ' {{selection.lunch}} –

+1

Teşekkürler @MarkRajcok! Bana yardımcı olan denetleyicide '$ scope.selection = {lunch: 'chicken'}; Ve ng-checked = "true" 'nu html radyo düğmesinden de çıkarmayı buldum, çünkü denetleyicideki ayar otomatik olarak/programlı olarak doğru radyo düğmesini seçecektir. –

+0

@MarkRajcok, $ ebeveynini kullanmaktan kaçınmak için object özelliğini kullanmanın ardındaki mantık nedir? –

4

yukarıdaki konu ng-repeat yeni bir kapsam oluşturduğundan olur

here tartışıldı. Temel olarak, her bir <input>, kendi iç kapsamında selectedOption değeri oluşturuyor. Bu konuda çalışmak için, bu değer için yeni bir kapsayıcı nesne oluşturun. Örneğin, controller içerisinde olduğuna dair karar:

$scope.data = {selectedOption: x}; 

Ve sonra şablonunda, ng model güncellenir bu şekilde ng-model="data.selectedOption"

kullanmak .. :)

bu zor

0

Değeri ng değeriyle değiştirmeniz yeterlidir.