ng-reflect-model 显示正确的值但未反映在输入中

Posted

技术标签:

【中文标题】ng-reflect-model 显示正确的值但未反映在输入中【英文标题】:ng-reflect-model shows correct value but not reflecting in input 【发布时间】:2017-04-01 11:38:38 【问题描述】:

遇到了一个非常奇怪的问题,即我的应用程序在非常特定的用户案例中表现不佳。我有一个门户,用户可以在其中添加问题和答案,然后对其进行编辑。在这种情况下,当我删除一个 set(q+a) 然后尝试添加它时,模型正在更新,但我的视图从占位符中获取值并自行更新。在这里,我只是在数组中拼接和推送值并使用 ngFor 进行渲染。最后一个元素是一个虚拟元素,用于输入向上推的值。

如果有任何意义,请附上屏幕截图。

您可以看到,对于文本框,ng-reflect-model 显示正确的问题,但元素本身显示占位符文本。

【问题讨论】:

请添加一些代码 通过在 ngFor 中添加 trackBy 解决了这个问题 请添加解决您问题的代码,以便其他人获得解决方案。谢谢 【参考方案1】:

显然问题是由于 Angular 无法正确跟踪我的数组的元素而引起的。我发现这一点非常困难。因此,只需向我的 ngFor 添加一个 trackBy 属性,我就能解决这个问题。

将此添加到我的组件中:

customTrackBy(index: number, obj: any): any 
  return index;

然后在模板中:

<div class="margin-bottom-15"
     *ngFor="let assessment of language.assessments; trackBy:customTrackBy">

所以基本上我要求 angular 按索引跟踪数组中的元素。它解决了这个问题。

这里的评估是每个问答集的模型。

【讨论】:

这可能是我在这里读过的最有用的帖子之一。我认为这是极少数情况,因为您不需要更多地注意拼写,因为您的内容会补偿它。虽然你可以:-) \o/ 谢谢彼得!你让我开心。 感谢老兄拯救了我的一天【参考方案2】:

如果您使用嵌套的 ngFor,则名称属性可能不是唯一的。它应该是独一无二的。所以为 name 属性加上 for 循环的索引使其唯一。

 <form #f="ngForm" validate>
      <div *ngFor="childItem of parentArray; index as pIndex;">
           <div *ngFor="childArray of childItem.parameters;index as cIndex;">
                 First Name: <input name="childArray-pIndex+''+cIndex" 
                 type="text" [(ngModel)]="childArray.firstname" required>
                 Last Name: <input name="childArray-pIndex+''+cIndex" 
                 type="text" [(ngModel)]="childArray.lastname" required>

                <button type="button" [disabled]="!f.valid"
                (click)="submitForm();"> Submit  </button>
            </div>
       </div>
 </form>

【讨论】:

【参考方案3】:

你也可以使用

*ngFor="childItem of parentArray; index as i;"

[attr.data-target]="'#test' + i"

name="testi

【讨论】:

以上是关于ng-reflect-model 显示正确的值但未反映在输入中的主要内容,如果未能解决你的问题,请参考以下文章

设置时区的 SimpleDateFormat 获得正确的值但区域错误

如何根据原始列表相同的值但不同的索引创建新列表

用户输入的值保存到 Core Data (?) 但未出现在表视图中

MVC 部分视图已更新,但未在主视图中显示

knockout.js 数据中的嵌套 foreach 显示但未正确显示

选择器视图在选择器视图中显示数字但未在标签上正确显示?