如何在ng-repeat循环中设置唯一的ng-model绑定?
解决AngularJS ng-repeat中为input绑定唯一ng-model的问题
我明白你现在的困扰——在ng-repeat循环里,想用每个循环项的语言标识(pl/eng)来绑定独立的ng-model,但用$index或key(数组索引)绑定后,model并没有按你期望的语言区分成唯一值。咱们一步步来解决这个问题:
问题根源
你的langInput.values是一个数组,用(key, n) in langInput.values循环时,key其实是数组的索引(0、1),而你期望的是用n.selected(pl、eng)作为model的键,这样每个语言对应的输入框才有独立的绑定值。之前用$index或key绑定的是数组元素,自然无法实现按语言区分的唯一model。
解决方案步骤
- 修改ng-model绑定:把
ng-model从inputs.auction_name_account[$index]/inputs.auction_name_account[key]改成inputs.auction_name_account[n.selected],这样每个输入框会直接绑定到inputs.auction_name_account对象中以pl/eng为键的属性。 - 确保表单name唯一:ng-repeat里的input如果name相同,表单控制器会把它们识别为数组,导致验证提示无法正确对应。所以要把
name属性改成动态唯一值,比如name="auction_name_account_{{n.selected}}",对应的验证指令也要调整为动态获取表单控件。 - 初始化model对象:在控制器里把
inputs.auction_name_account初始化为一个空对象,而不是数组,这样才能存储以语言标识为键的属性。
修改后的完整代码
HTML部分:
<div data-ng-repeat="(key, n) in langInput.values"> <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 u-no-padding"> <label class="sell__label" for="auction_name_account_{{n.selected }}">Główna nazwa Twojej aukcji ({{n.selected }}):</label> <div class="pst-relative"> <input type="text" id="auction_name_account_{{n.selected }}" class="form-control" name="auction_name_account_{{n.selected}}" data-ng-model="inputs.auction_name_account[n.selected]" data-ng-minlength="10" data-ng-maxlength="60" required /> <span class="sell__input-text sell__input-text--big-input" data-ng-show="sellItem['auction_name_account_' + n.selected].$error.required">Wymagane!</span> <span class="sell__input-text sell__input-text--big-input" data-ng-show="sellItem['auction_name_account_' + n.selected].$error.minlength">Za krótkie!</span> <span class="sell__input-text sell__input-text--big-input" data-ng-show="sellItem['auction_name_account_' + n.selected].$error.maxlength">Za długie!</span> </div> </div> </div>
控制器初始化部分:
$scope.inputs = { auction_name_account: {} // 初始化为空对象,用于存储pl/eng对应的输入值 }; $scope.langInput = { values: [ { id: "1", selected: "pl" }, { id: "2", selected: "eng" } ] };
效果说明
这样修改后,每个语言对应的输入框会绑定到inputs.auction_name_account.pl和inputs.auction_name_account.eng,它们是完全独立的属性,实现了你想要的“唯一值”绑定。同时表单验证也能正常对应每个输入框的错误状态。
内容的提问来源于stack exchange,提问作者BT101
相关产品推荐
相关产品推荐

