1

angular2-meteor では、Mongo.Cursor と zone() メソッドの代わりに MongoObservable.Collection の使用を開始しました。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() と | を使用しない場合 非同期の場合、すべてのユーザー リストを取得しますが、ユーザーを削除するか、新しいユーザーを作成すると、リストが自動的に更新されず、更新する必要があります。新しいコンテンツを自動レンダリングするには、ゾーンと非同期を使用する必要がありますが、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 に答える