2016-12-17 8 views
0

コンポーネントからサービスコンストラクタに値を渡そうとしています。 paramを渡そうとしているオブジェクト。 私のコードは次のとおりです。コンストラクタからサービスにパラメータを渡す方法

constructor(public af: AngularFire, public userData: UserData ,param: boolean) { 
    this.smartTableData = this.af.database.list('events/' + this.userData.user.uid + '/contacts',{ 
    preserveSnapshot: param, //this param should be taken from component 
     query: { 
     orderByChild: 'tableNumber' 

     } 
    }); 

と私のコンポーネント:サービスインスタンスが現在の噴射器内のシングルトンであるため、

import {LocalDataSource} from 'ng2-smart-table'; 

@Component({ 
    selector: 'basic-tables', 
    encapsulation: ViewEncapsulation.None, 
    styles: [require('./smartTables.scss')], 
    template: require('./smartTables.html') 
}) 
export class SmartTables { 
    constructor(protected service: SmartTablesService) { 
     this.service.smartTableData.subscribe((data) => { 
      console.log(data); 
      this.source.load(data); 
     }); 
     } 
+0

でなければなりません。しかし、私は2つのコンポーネントを提供することができ、サービスを持っていますが、それは扱うことができ、ほんの1つのconfの –

+0

によって異なるが、 'datatopass'が何であるかに依存します。一般に、 'setData(datatopass)'メソッドとすることができます。しかし、問題は、サービスがそれが属するインジェクタ内のシングルトンであり、2つの構成要素に同時に「データパス」を設定することは、予期せぬ結果につながることである。問題は「SmartTablesService」で本質的に何が起こるかを明確にするはずです。 – estus

+0

私の投稿を更新しました。必要な値はparamです。 1つのコンポーネントはそれを真とし、それ以外の偽を必要とします。 2つのコンポーネントは同じページではありません.2コンポーネントはfirebaseリストを更新します。 –

答えて

1

サービスのコンストラクタで要求を行うには便利ではありません。 af.database.listは最初の注射で1回だけ呼び出され、paramも1回注射されます。

もう1つの問題は、コンポーネントコンストラクタの前にDIが発生することです。

それは

constructor(public af: AngularFire, public userData: UserData) {} 

getData(param: boolean) { 
    return this.af.database.list(...); 
} 
関連する問題