Angular 2中的依赖性注射 - Ionic2&打字稿

时间:2016-03-31 08:24:17

标签: angularjs typescript angular ionic2

我在应用程序中引导某些文件时遇到了一些问题。建立在Ionic2标签示例之上。

我有一个服务和一个用户文件,每个文件都用@injectable修饰。我想在整个应用程序中使用1个实例,所以我正在尝试引导它。我已经向提供商添加了平台,我不确定整个应用程序或每个组件是否需要1个实例?

import {App, Platform} from 'ionic-angular';
import {bootstrap} from 'angular2/platform/browser';
import {TabsPage} from './pages/tabs/tabs';
import {User} from './User.ts';
import {Service} from './Service.ts';
import {Type} from 'angular2/core';

@App({
    template: '<ion-nav [root]="rootPage"></ion-nav>',
    providers: [Platform]
})
export class MyApp {

    rootPage: Type = TabsPage;

    constructor(platform: Platform, user: User) {

        platform.ready().then(() => {
            user.start();
        });

    }
}

bootstrap(MyApp, [
    Service,
    User 
]);

我在控制台中收到2个错误

  

无法解析“平台”(?)的所有参数。确保所有   参数用Inject修饰或具有有效类型   注释和'平台'用Injectable修饰。

然后

  

未捕获的TypeError:无法读取未定义的属性“getOptional”

我的服务例如,看起来像这样

import {Injectable} from 'angular2/core';

@Injectable()
export class Service {
   //
}

2 个答案:

答案 0 :(得分:1)

How to pass parameters for dependency while Injecting services in services in Angular 2 ( Ionic 2 / Angular 2 / Typescript )

这篇文章表明@App是一个离子装饰器,可以引导应用程序。我向提供商添加了用户和服务,所有这些似乎都在运行。平台不需要添加到提供者。

when(bitReader.read(anyInt())).thenAnswer(...)

答案 1 :(得分:0)

您无需在组件的提供程序中指定Platform

@App({
  template: '<ion-nav [root]="rootPage"></ion-nav>'
  providers: [Platform] // <------
})
export class MyApp {

  rootPage: Type = TabsPage;

  constructor(platform: Platform, user: User) {
    (...)
  }
}

此外,我认为您的导入中不需要.ts扩展名:

//import {User} from './User.ts';
//import {Service} from './Service.ts';
import {User} from './User';
import {Service} from './Service';

您是否在项目中使用TypeScript或ES6?