2013-07-25 25 views
21

Tôi đang cố tạo các đầu vào biểu mẫu bằng ng-repeat. Lưu ý: 'customFields' là một mảng các tên trường: ["Age", "Weight", "Ethnicity"].AngularJS: ng-mô hình bên trong ng-lặp lại?

<div class="control-group" ng-repeat="field in customFields"> 
    <label class="control-label">{{field}}</label> 
    <div class="controls"> 
     <input type="text" ng-model="person.customfields.{{field}}" /> 
    </div> 
</div> 

Cách tốt nhất/đúng để đặt 'ng-model' là gì? Tôi muốn gửi cho máy chủ dưới dạng person.customfields.'fieldname ' nơi tên trường đến từ' trường trong customFields '.

Trả lời

27
<div ng-app ng-controller="Ctrl"> 
    <div class="control-group" ng-repeat="field in customFields"> 
     <label class="control-label">{{field}}</label> 
     <div class="controls"> 
      <input type="text" ng-model="person.customfields[field]" /> 
     </div> 
    </div> 
    <button ng-click="collectData()">Collect</button> 
</div> 

function Ctrl($scope) { 
    $scope.customFields = ["Age", "Weight", "Ethnicity"]; 
    $scope.person = { 
     customfields: { 
      "Age": 0, 
       "Weight": 0, 
       "Ethnicity": 0 
     } 
    }; 

    $scope.collectData = function() { 
     console.log($scope.person.customfields); 
    } 
} 

Bạn có thể thử nó here.

Cập nhật:

Đối với xác nhận, thủ đoạn này là đưa <ng-form> bên trong repeater. Vui lòng try.

+0

Tôi đã [mở rộng jsfiddle] (http://jsfiddle.net/vorburger/jqbGf/1/) bao gồm yêu cầu xác thực trường, nhưng điều đó không ' t làm việc .. bạn có bất kỳ ý tưởng làm thế nào để có được rằng làm việc? Giả sử tất cả các trường bắt buộc chỉ vì mục đích ví dụ; có thể được đọc từ mô hình, nhưng điều đó không liên quan để minh họa vấn đề. Điều này rất giống với [vấn đề liên quan của tôi (ngoài ra còn có thêm trường tùy chỉnh linh hoạt 'đường dẫn')] (http://stackoverflow.com/questions/17841915/angularjs-ng-model-form-driven-by- ng-repeat-over-ui-mô-đun-mô tả-dữ liệu-cách-t) – vorburger

+1

@vorburger Cập nhật. Vui lòng thử. – zsong

+0

Điều đó hoạt động - bạn là một thiên tài !! ;) Tuy nhiên, tôi đã nhận thấy rằng bạn có 1. chuyển sang lồng nhau ng-form, và 2. cố định thoát trong ng-show bằng cách sử dụng myForm ['\ {\ {field \} \}']. $ Error.required. .. ra khỏi tò mò tôi đã [trở lại 1. và giữ 2.] (http://jsfiddle.net/vorburger/jqbGf/4/) và nó vẫn hoạt động - tôi thiếu một cái gì đó? PS: Tôi sẽ cập nhật vấn đề liên quan của tôi. – vorburger

6

Nó nên là:

<input type="text" ng-model="person.customfields[field]" /> 
+0

Điều này không phù hợp với tôi – 502502

+5

Bạn cần tạo '$ scope.pers on = {customfields: {}}; '@Finnayra – finishingmove

+0

Cảm ơn @finishingmove – 502502

-1

Hãy thử điều này ng mô hình = "person.customfields." {{}} Lĩnh vực Moved các dấu ngoặc kép

+0

Tôi đã không thử điều này nhưng tôi đã làm việc mã cho loại trường hợp tương tự. Lọc dựa trên thuộc tính (tên được chọn từ danh sách thả xuống) – avi

3

Bất kỳ ai kết thúc ở đây Đối với ng-model bên ng-repeat

http://jsfiddle.net/sirhc/z9cGm/

liên kết ở trên có mô tả tốt về cách sử dụng nó với các ví dụ

+2

Bạn nên mô tả giải pháp. – smartmeta

+0

Akr thực sự cần mô tả giải pháp, nhưng ví dụ jsfiddle của Akr hoàn toàn tuyệt vời và mang tính thông tin.Về cơ bản, liên kết với bất kỳ mảng đối tượng nào có chứa các đối tượng mong muốn. – JasonNew

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