如何在 Meteor.users.find({}) 上使用 zone()

how to use zone() on Meteor.users.find({})

现在在 angular2-meteor 中我们开始使用 MongoObservable.Collection 代替 Mongo.Cursor 和 zone() 方法,这有助于使用我们的组件的区域和 | 将集合更改到我们的视图中。 html 模板中的异步。这是 latest tutorial

中的 link

现在,我正尝试在我的 Meteor.users.find({}) 方法中使用此 zone() 方法,以便在成功创建任何新用户时自动显示我应用程序中的所有用户。

我服务器端的代码

Meteor.publish("userData", function() {
    if (Roles.userIsInRole(this.userId, 'admin')) {
        return Meteor.users.find();
    } else {
        const selector = {
            '_id': this.userId
        };
        return Meteor.users.find(selector);
    }
});

在客户端我使用了

userlist: Observable<any[]>;
userSData: Subscription;
     ngOnInit() {
            this.usersData = MeteorObservable.subscribe('userData').subscribe(() => {
                this.userlist=Meteor.users.find({}).fetch();
            });

html 代码为

   <li class="list-item" *ngFor="let user of userlist">

当我将 .zone() 应用于此 this.userlist = Meteor.users.find({}).zone();
我收到这个错误。

TypeError: meteor_1.Meteor.users.find(...).zone is not a function

如果我不使用 zone() 和 |异步然后我得到所有用户列表但是如果我删除任何用户或创建任何新用户我的列表不会自动更新我必须刷新。对于自动呈现新内容,我们必须使用区域和异步,但它不适用于 Meteor.users.find().

也许视图没有更新...尝试使用 NgZone(从@angular/core 导入它)并在您的订阅中使用它,如下所示:

constructor(private ngZone: NgZone) {}

ngOnInit() {
    this.clientsSub = MeteorObservable.subscribe('myClients').subscribe(() => {
        this.ngZone.run(() => {
            this.clients = Clients.find({}, {sort: {name: 1}});
        });
    });
}