1

现在在 angular2-meteor 中,我们开始使用 MongoObservable.Collection 代替 Mongo.Cursor 和 zone() 方法,这有助于使用我们组件的 Zone 和 | 将集合更改为我们的视图。html 模板中的异步。这是最新教程的链接

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

4

1 回答 1

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}});
        });
    });
}
于 2016-10-25T13:55:27.170 回答