如何在Meteor.users.find({})

时间:2016-10-25 07:30:43

标签: meteor angular2-meteor

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

的链接

现在我尝试在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()和| async然后我得到所有用户列表,但如果我删除任何用户或创建任何新用户我的列表不会自动更新我必须刷新。为了自动呈现新内容,我们必须使用zone和async,但它不能与Meteor.users.find()一起使用。

1 个答案:

答案 0 :(得分:2)

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

constructor(private ngZone: NgZone) {}

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