2016-06-28 11 views
0

Angular2 - Meteorで開発するのが初めてです。親子コンポーネントを扱う際に問題が発生しました。親コンポーネントでは、コレクションに流星を登録しています。子コンポーネントに渡されるデータを更新するAngular2

users: any; 

constructor(private _zone:NgZone){ 


    var sub = Meteor.subscribe("accounts/users"); 
    Tracker.autorun(function() { 
     _zone.run(function() { 
      if(sub.ready()){ 
       this.users = Meteor.users.find().fetch(); 
       console.log(this.users); 
      } 
     }); 
    }); 

} 

ユーザーコレクションの合計は90人です。アプリケーションが最初に読み込まれると、現在のユーザーだけが検出され、コンソールログには1人のユーザーが表示されます。

Tracker.autorun()とNgZoneの配置が正しいかどうかはわかりませんが、アプリケーションのロードの2分後に、コンソールログに90人のユーザーの配列が表示されます。私は、購読が最初に準備ができていないので、これが起こると仮定します。

私の子コンポーネントは、このようなパラメータとしてフェッチされたユーザーを受け取ります<sd-table [data]="users"></sd-table>。アプリケーションのロード時に、子コンポーネントの描画されたテンプレートに表示されるユーザーは1人だけです。サブスクリプションが発生し、すべてのユーザーがアクセス可能になったときにテンプレートを更新できる方法はありますか?

+0

を使用していない、あなたは流星コンポーネントメソッドを使用してみましたか? –

+0

私はそうは思わない、これについて話している? [link](https://www.angular-meteor.com/tutorials/socially/angular2/meteor-methods) –

答えて

0

あなたは現在のクラスのthisを参照したい場合は、function()

users: any; 

constructor(private _zone:NgZone){ 
    var sub = Meteor.subscribe("accounts/users"); 
    Tracker.autorun(() => { 
     _zone.run(() => { 
      if(sub.ready()){ 
       this.users = Meteor.users.find().fetch(); 
       console.log(this.users); 
      } 
     }); 
    }); 
} 

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions

+0

私のことを指摘してくれてありがとう、私は子供のコンポーネントでngOnChangesを使用しています、そして、変更。しかし、これはテンプレートがロードされた後に起こります。コンポーネントが新しいデータを受け取ったときにテンプレートを更新する方法はありますか? –

+0

特定の機能はありません。 'user'が設定された後にのみコンポーネントをレンダリングする場合は、テンプレートの最も外側の要素に' * ngIf = "users" 'を追加してください。 –

関連する問題