【问题标题】:AngularJS ng-repeat inputAngularJS ng-repeat 输入
【发布时间】:2017-11-19 17:45:31
【问题描述】:

我正在尝试使用 Angular js 制作 cmets 功能。问题是当我想为帖子写评论时,文本也在其他输入元素(cmets)中写入。我在一个输入中写了一个文本,但它在所有输入中都写了它

因此,例如,这段代码也会发生同样的情况

<div class="comments" ng-repeat="articles in [1,2,[4,5,6]]">
<div ng-repeat="comments in articles">
    <div>
        <input type="text" ng-model="$parent.new">
    </div>
</div>

如果我使用 new 而不是 $parent.new 我会得到未定义,但是当我使用 $parent.new 并写入一个输入时,它也会写入其他输入。

【问题讨论】:

  • 这是因为您使用 ngModel 将每个输入绑定到同一个模型。
  • 以及如何正确?我有 ng-repeat 根据数组中有多少新闻生成的 div。每个 div 内有一个输入。

标签: javascript angularjs


【解决方案1】:

问题是您将所有输入分配给同一个模型,因此您的输入都与同一个对象同步。

您需要将每个输入分配给不同的模型。我猜你需要这些模型是动态的,所以你应该使用一个数组作为你的模型并通过$index 跟踪你的ng-repeat,如下所示:

<div ng-repeat="comments in articles track by $index">
    <div>
        <input type="text" ng-model="arr[$index]">
        <span ng-if="arr[$index]">
            {{arr[$index]}}
        </span>
    </div>
</div>

现在,在您的控制器中,您可以像这样初始化空的 arr:

$scope.arr = [];

现在,您的输入将与 $scope.arr 同步,具体取决于它们所在的索引。

以jsfiddle 为例。

【讨论】:

  • 很高兴我能帮上忙!如果您对答案感到满意,请选择此作为答案来结束问题。
  • 我想对编辑应用相同的东西。我有三个文本框。单击第二个文本框的编辑后,我想显示与第二个文本框相关的值。但现在它显示在所有文本框中。
【解决方案2】:

这是因为您为所有inputs 提供了相同的model (ng-model="$parent.new") 为避免此问题,您应该为每个输入元素分配不同的model。类似的东西

<div class="comments" ng-repeat="articles in [1,2,[4,5,6]]">
<div ng-repeat="comments in articles">
<div>
    <input type="text" ng-model="comments">
</div>
</div>

【讨论】:

  • 稍微修改了代码。是的,我该怎么办?假设我有 3 个 div,每个 div 都有一些信息和输入。我想在第一个 div 上写评论。这个怎么做?
  • 现在你的comments 数组中的article 将被建模为这个值。
  • 以及如何通过范围访问?因为在这种情况下 $scope.cmets 是未定义的
  • $scope.articles.comments
【解决方案3】:

将输入的 ng-model 更改为

<input type="text" ng-model="comments.comment">

【讨论】:

    猜你喜欢
    • 2017-11-27
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多