我不明白为什么会收到错误。我的地图没有改变
检查后表情发生了变化。上一个值:' [对象 Map Iterator]'。当前值:' [对象地图迭代器]'
<tr *ngFor="let author of bindedAuthors.keys()">
<td> {{author}}</td>
<td>
<button (click)="onUpdate(author)"
class="btn gl-btn-primary">Update
</button>
</td>
<td>
<button (click)="onDelete(author)" class="btn gl-btn-default">Delete</button>
</td>
</tr>
结果是预期的,所有数据都会显示,但每次都会出现这个错误。
答案 0 :(得分:16)
不要绑定到模板中的方法...keys()
。
每次更改检测运行时都会调用它。
object.keys()
每次调用时都会返回一个新对象,Angular会将其识别为意外更改,从而导致您的错误。
您可以像
一样修复它someMethod() {
this.bindedAuthorsKeys = this.bindedAuthors.keys();
}
*ngFor="let author of bindedAuthorsKeys"
答案 1 :(得分:2)
this.keysOfObject = Object.keys(---) <---put your object or array inside.
Now,
<tr *ngFor="let author of keysOfObject">
'
'
'
</tr>
答案 2 :(得分:1)
我尝试了上述解决方案,但只有以下解决方案对我有用。
希望有帮助:
get getBindedAuthors(){
return Array.from(bindedAuthors.keys());
}
<tr *ngFor="let author of getBindedAuthors">
<td> {{author}}</td>
<td>
<button (click)="onUpdate(author)"
class="btn gl-btn-primary">Update
</button>
</td>
<td>
<button (click)="onDelete(author)" class="btn gl-btn-default">Delete</button>
</td>
</tr>
答案 3 :(得分:0)
我的地图是从Firestore自动同步的当前数据的主要来源。如果我按照Günter接受的答案中的建议进行操作,则必须确保此数组与我的地图保持同步。取而代之的是,我将Angular的内置keyvalue
管道直接用于地图,如下所示:
<tr *ngFor="let author of bindedAuthors | keyvalue">
<td> {{author.value}}</td>
<td>
<button (click)="onUpdate(author.value)"
class="btn gl-btn-primary">Update
</button>
</td>
<td>
<button (click)="onDelete(author.value)" class="btn gl-btn-default">Delete</button>
</td>
</tr>
我没有意识到任何警告吗?