2016-12-17 293 views
0

我试图从组件传递一些值给服务构造函数。 我试图传递参数的对象。 我的代码是:如何将参数传递给构造函数的服务

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

但我服务,只能由一个的conf –

+0

它可以处理取决于什么'datatopass'是这样的发球2个组件,但不同的。通常它可以是'setData(datatopass)'方法。但问题在于,服务是属于它的注入器中的单例,并且将'datatopass'设置为两个组件同时会导致不可预知的结果。这个问题应该澄清'SmartTablesService'中发生的事情。 – estus

+0

我更新我的帖子,需要的值是param它只是布尔值。一个组件需要它作为true和其他false。 2个组件不相同的页面。2组件更新Firebase列表。 –

回答

1

这是不方便做服务的构造函数的请求,因为服务实例是电流注射器内单。 af.database.list只在第一次注射时被调用一次,而param也只会被注入一次。

另一个问题是DI在组件构造函数之前发生。

应该

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

getData(param: boolean) { 
    return this.af.database.list(...); 
} 
相关问题