【问题标题】:Change ng-model inside of ng-repeat loop在 ng-repeat 循环中更改 ng-model
【发布时间】:2018-05-16 00:14:35
【问题描述】:

我正在尝试根据 ng-repeat 的 $index 或我正在循环的对象的键将 ng-model 绑定到输入。

我试过这样

<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"
                   data-ng-model="inputs.auction_name_account[$index]"
                   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.$error.required">Wymagane!</span>
            <span class="sell__input-text sell__input-text--big-input" data-ng-show="sellItem.auction_name_account.$error.minlength">Za krótkie!</span>
            <span class="sell__input-text sell__input-text--big-input" data-ng-show="sellItem.auction_name_account.$error.maxlength">Za długie!</span>
        </div>
    </div>
</div>

像这样

<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"
                   data-ng-model="inputs.auction_name_account[key]"
                   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.$error.required">Wymagane!</span>
            <span class="sell__input-text sell__input-text--big-input" data-ng-show="sellItem.auction_name_account.$error.minlength">Za krótkie!</span>
            <span class="sell__input-text sell__input-text--big-input" data-ng-show="sellItem.auction_name_account.$error.maxlength">Za długie!</span>
        </div>
    </div>
</div>

我正在循环的对象是:

$scope.langInput = {
    values: [
        {
            id: "1",
            selected: "pl"
        },
        {
            id: "2",
            selected: "eng"
        }
    ],

结果是我的 ng-model 不是我想要的 inputs.auction_name_account[$index]inputs.auction_name_account[key]

我希望ng-model="value" 的值是唯一的。


这里是demo

【问题讨论】:

  • 你的 $scope.inputs.auction_name_account 数组是什么?
  • 在我的控制器中?只有$scope.inputs = {};
  • 另外,$scope.langInput.values 似乎是一个数组,但你在它上面循环,就好像它是一个对象或字典一样。
  • 那么它上面的auction_name_account 没有定义,所以你不能把它当作一个对象或者一个数组来调用。你可能需要先初始化它。
  • 你能在这里修复它吗plnkr.co/edit/zaHPNWHhDSLwYZIKvmXh?p=previewfork new plnkr 并将其发布为答案?

标签: javascript angularjs angular-ngmodel ng-bind


【解决方案1】:

确保在输入中初始化数组(如果您希望它是一个简单的数组,否则默认情况下它将是一个对象):

$scope.inputs = {
    auction_name_account: [];
};

见plunk:https://plnkr.co/edit/EkMZ6nJszuKt40K1FKOA?p=preview

(另请注意,由于输入有最小长度,因此在超过 10 个字符之前它不会显示在模型中,否则它将显示为 null)

为了让您的错误范围正常工作(在下面的 cmets 中回答问题),您需要修复输入中的名称以包含索引:

name="auction_name_account_{{value.selected}}"

然后在您的跨度中使用该名称(假设您的表单名为“sellItem”):

<span class="error sell__input-text sell__input-text--big-input" data-ng-show="sellItem.auction_name_account_{{value.selected }}.$error.required">Wymagane!</span>

【讨论】:

  • 在我的 SPA 中,这个验证怎么可能跨越以下行为,就像它在 plunker 上连接到两者时一样工作正常。我的意思是在我的应用程序中,当我有 1 个输入正确和 1 个输入不正确时,两个跨度都显示它不正确
  • 你是什么意思他们“都表明它是不正确的”?您的意思是在 both 都正确之前,模型中的值都显示为 null 吗?我建议将实际值打印到屏幕上,看看什么时候得到什么。
  • 好吧 - 例如,当我在第一个中写 15 个符号,在第二个中写 0 个符号时,两者都有跨度“必需”,然后当我在第一个中放置 15 个符号,在第二个中放置 1 个符号时,两者都显示跨度“太短”
  • 然后,当我在第一个中写 15 个标志和在第二个中写 150 个标志时,都显示跨度“太长”。我打印了{{ inputs }} 的值,它正在正确更新
  • 我已经更新了我的答案(和 Plunkr)以包含 @BT101
猜你喜欢
  • 2013-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-09
  • 1970-01-01
  • 2015-08-13
  • 2017-11-19
相关资源
最近更新 更多