我无法将Injectable类导入为服务

时间:2016-09-24 20:17:05

标签: angular typescript dependency-injection ionic2 hybrid-mobile-app

我正在使用Ionic 2构建应用程序并遇到了问题。任何帮助都会非常感激。

我正在使用一个名为plan-data.ts的服务来获取并将数据发布到firebase数据库。我遇到的问题是,当我尝试导入并在几个上声明plan-data.ts文件时具体组件,它出错了。在下面的页面上它工作正常!

    **DASHBOARD.ts**
    import { Component } from '@angular/core';
    import { NavController, NavParams } from 'ionic-angular';
    import { PlanData } from '../../providers/plan-data/plan-data';

    @Component({
      templateUrl: 'build/pages/dashboard/dashboard.html',
      providers: [PlanData]
    })
    export class DashboardPage {

      constructor(private navCTRL: NavController, public planData: PlanData){
        this.planData = planData;
        this.loadList();
      }
      ...
    }

但是在这个文件中,当我尝试导入并将其声明为provider时,它会失败并显示错误:Cannot read property 'parameters' of undefined

    **STOPWATCH.ts**
    import { Component } from '@angular/core';
    import { NavController, NavParams } from 'ionic-angular';
    import { PlanData } from '../../providers/plan-data/plan-data';

    @Component({
      templateUrl: 'build/pages/watch-calc/watch-calc.html',
      providers: [PlanData]
    })
    export class WatchCalcPage {

      constructor(private navCTRL: NavController, public planData: PlanData) {
        this.planData = planData;
      }

我似乎无法弄清楚第二页上有什么不同或错误,似乎找不到任何人遇到这个问题,这意味着我可能没有看到简单的事情。建议会非常有帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

  

我正在使用名为plan-data.ts的服务来获取和发布数据   firebase数据库

有意想要在每个页面中创建PlanData类的新实例吗?通过在DashboardPageWatchCalcPage的提供者数组中添加它,将为每个页面创建不同的实例。

为了在整个应用程序中使用相同的实例,您应该在最顶层组件的providers数组中包含PlanData类,如下所示:

@Component({
  templateUrl: 'build/app.html',
  providers: [PlanData, ...]
})
export class MyApp { ... }

然后将其包含在构造函数

import { Component } from '@angular/core';
import { NavController, NavParams } from 'ionic-angular';
import { PlanData } from '../../providers/plan-data/plan-data';

@Component({
  templateUrl: 'build/pages/watch-calc/watch-calc.html'
})
export class WatchCalcPage {

  constructor(private navCTRL: NavController, public planData: PlanData) {
    // this.planData = planData; <- you don't need to do this; it's done automatically by typescript because it's included as a parameter in the constructor.
  }