2013-07-16 34 views
45

Tôi đang tạo một loạt các nút radio bằng ng-repeat và sau đó cố cập nhật mô hình khi một trong số chúng được chọn. Điều này dường như không hoạt động.AngularJS - Mô hình không cập nhật lựa chọn nút radio được tạo bởi ng-repeat

Đánh dấu tương tự chỉ hoạt động tốt khi đầu vào radio được mã hóa cứng ngược với được tạo bởi ng-repeat.

này hoạt động:

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

này không:

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

Xem jsfiddle thể hiện cả ở đây: http://jsfiddle.net/mark_up/A2qCS/1/

Bất kỳ trợ giúp sẽ được đánh giá cao.

Cảm ơn

Trả lời

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

Nên làm các trick.

Như tôi đã hiểu, ng-repeat tạo riêng $scope của riêng mình. Vì vậy, bạn cần phải tham khảo $parent $scope; Có, AngularJS là khó khăn. Ngoài ra, bạn cũng cần phải thay đổi số value thành ng-value.

+33

Cách khác để sử dụng '$ parent' là sử dụng thuộc tính đối tượng trong bộ điều khiển:' $ scope.selection = {lunch: 'chicken'}; ', sau đó trong HTML: ' {{selection.lunch}} ' –

+1

Cảm ơn @MarkRajcok! Nó đã đặt '$ scope.selection = {lunch: 'chicken'};' trong bộ điều khiển đã giúp tôi. Và tôi tìm thấy để loại bỏ 'ng-checked =" true "' khỏi nút radio html, vì cài đặt đó trong bộ điều khiển sẽ chọn nút radio chính xác tự động/lập trình. –

+0

@MarkRajcok, lý do đằng sau việc sử dụng thuộc tính đối tượng để tránh sử dụng $ parent là gì? –

4

vấn đề trên đã được thảo luận here

Điều đó xảy ra vì ng-lặp lại tạo ra phạm vi mới. Về cơ bản, mỗi <input> đang tạo một giá trị lựa chọnOption trên phạm vi bên trong của chính nó. Để làm việc xung quanh đó, hãy tạo đối tượng vùng chứa mới cho giá trị đó. Ví dụ, bạn có thể tuyên bố trong điều khiển của bạn:

$scope.data = {selectedOption: x}; 

Và sau đó trong mẫu của bạn, sử dụng ng-model="data.selectedOption"

theo cách này, ng-mô hình được cập nhật .. :)

này là khó khăn

0

Chỉ cần thay thế giá trị bằng ng-giá trị

Các vấn đề liên quan