You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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。

解决方案步骤

  1. 修改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为键的属性。
  2. 确保表单name唯一:ng-repeat里的input如果name相同,表单控制器会把它们识别为数组,导致验证提示无法正确对应。所以要把name属性改成动态唯一值,比如name="auction_name_account_{{n.selected}}",对应的验证指令也要调整为动态获取表单控件。
  3. 初始化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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:52:38