Angular2 DI:注入全局扩展服务(无法解析所有参数)

时间:2016-10-03 17:09:05

标签: angular firebase ionic2 angularfire2

我刚刚使用AngularFire2将我的Ionic应用程序代码库升级到ng2版本。在代码库中,我有一个名为FirebaseService的全局服务,它扩展了AngularFire。

@Injectable()
export class FirebaseService extends AngularFire {

  constructor(firebaseConfig: string, auth: AngularFireAuth, database: FirebaseDatabase) {
      super(firebaseConfig, auth, database);
  }

...

}

在我的app.component.ts我在providers数组中添加了FirebaseService(我已经尝试了FirebaseService{ provide: AngularFire, useClass: FirebaseService })。但是,当我运行应用程序时,我收到以下错误:

Uncaught Error: Can't resolve all parameters for DiscoverPage: (NavController, GlobalService, ?, Events).

DiscoverPage的构造函数如下:

@Component({
  selector: 'catalogue-discover',
  templateUrl: 'catalogue-discover.html'
})

export class DiscoverPage {
  constructor(private nav: NavController, 
              private global: GlobalService,
              public firebase: FirebaseService, 
              private events: Events) {
  }

...

}

'?'指向FirebaseService - 我感觉我没有正确执行DI。关于如何进行的任何建议?

2 个答案:

答案 0 :(得分:2)

有两个可能的问题:

  1. 如@shinglesmingles所述,您应该将装饰器# Extract all levels having > 1000 observations (df is the dataframe name) val levels_count = df.groupBy("Col_name").count.filter("count >10000").sort(desc("count")) # Extract the level names val level_names = level_count.select("Col_name").rdd.map(x => x(0)).collect 添加到服务类声明中

  2. 避免循环引用,虽然它们通常有效,但有些情况下它们不会

  3. [2]的例子:

    # Define UDF
    val var_transform = udf((x: String) => {
        if (level_names contains x) x
        else "others"
     })
    
    # Apply UDF to the column
    val df_new = df.withColumn("Var_new", var_transform($"Col_name"))
    

答案 1 :(得分:0)

您应该将@Injectable()装饰器添加到您的服务中。