【发布时间】:2020-01-09 12:52:18
【问题描述】:
我在 Angular 8 的组件 html 文件中有一个输入字段
<!-- simplified -->
<form>
<div *ngFor="let r of reviews">
<input name="Text" value="{{ r.reviewText }}" [(ngModel)]="r.reviewText" />
</div>
</form>
[(ngModel)] 很好地将数据更新(http puts)回数据库。
问题是value="{{ r.reviewText }}" 不会在加载或重新加载页面时将数据库中存在的数据加载回该字段。我可以输入内容,但加载/重新加载时输入字段始终为空白。无论语法是value="{{ r.reviewText }}" 还是[value]="r.reviewText",情况都是如此。
如果我删除 [(ngModel)]="r.reviewText" -- 然后数据被加载到该字段的值中,但显然在更新回数据库方面的绑定不起作用。好像 ngModel 和 value 元素是互斥的。我理解 [(ngModel)] 是双重绑定 - 但在这种情况下,它似乎只是单一绑定 - 推回数据库可以,但不会反过来。我尝试了与 textarea 类似的方法,但它与输入有相同的问题 - 它不显示 r.reviewText,但 ngModel 有效:
<textarea name="Text" [(ngModel)]="r.reviewText" >{{ r.reviewText }}</textarea>
注意:如果我将{{ r.reviewText }} 放在页面的其他位置,而不是在输入或 textarea 标记中,则来自 db 的数据会在加载/重新加载时显示在该位置 - 然后还会镜像我在输入字段中键入的内容当我键入时 - 正如预期的那样。
如何在页面加载或刷新时在输入的 value 参数中显示 {{ r.reviewText }} 的数据库内容,同时仍然能够使用 [(ngModel)] 将更新的内容更新/保存到数据库?任何意见表示赞赏,谢谢。
【问题讨论】:
-
嗨,你能在这里打印整个评论数组吗?
-
看起来问题出在 *ngFor.. 使用 asyn 并尝试
*ngFor="let r of reviews | async" -
评论对象是这样的:
{ "id": 1399, "reviewText": "ghjjhhh", "okNotOk": false, "toBeDeleted": false, "reviewerName": "reviewer1", "itemCode": "YFS001" } -
*ngFor="let r of reviews",这里的 reviews 是数组还是对象?首先澄清这一点!
-
Sunny - 它是一个包含 2000 个对象的数组,我只是给你一个例子 - 不打算放入整个数组