当我从集合中删除文档时,并非所有客户端的视图都会更新。为什么呢?

时间:2016-01-31 17:02:16

标签: meteor angular angular2-template angular2-meteor

我正在使用正在使用Angular2 Beta 1的Angular2-meteor(截至目前)。

我有一个包含以下内容的简单组件:

  • 按钮添加文档。新文档显示一个按钮,以便通过_id删除它。
  • 还有一个"全部删除"按钮,循环通过collection.find()按_id删除每个文档。

它大部分工作正常。您可以使用各自的删除按钮添加文档并将其删除。当你"全部删除"它将它们全部从数据库中删除。光标报告count()为0.一个新的collection.find()。count()报告0.但它只删除模板上显示的第一个文件。发起removeAll()的客户端。其他文档仍显示在浏览器中。重新加载页面时,它会显示数据库的正确内容。 其他已连接的客户端始终显示正确的集合内容。只有启动removeAll()的客户端才会受到影响。

模板,"全部删除"按钮和* ng用于显示文档

<input type="button" value="Remove All" (click)="removeAll()">
<ul>
  <li *ngFor="#doc of docs">
    <input type="button" value="Remove" (click)="remove(doc._id)">
    point: x={{ doc.x }} y={{ doc.y }} _id={{ doc._id }}
  </li>
</ul>

组件:

@Component({
    selector: 'db-test',
    templateUrl: 'client/db-test/db-test.html',
    directives: [CORE_DIRECTIVES],
})
export class DbTestComponent{
    coll = DbTestCollection;
    docs: Mongo.Cursor<Object>;

    constructor() {
        this.docs = this.coll.find();
    }

    removeAll() {
        this.docs.forEach((d) => {
            this.coll.remove(d._id);
        });
    }

    remove(id) {
        this.coll.remove({ _id: id });
    }

    add(point: Point = {x: Math.random(), y: Math.random()}) {
        this.coll.insert(point);
    }

}

1 个答案:

答案 0 :(得分:0)

removeAll

中运行removeaddzone中的代码