为什么我需要编写静态get参数()

时间:2016-04-19 09:59:16

标签: angularjs ionic-framework angular ionic2

我一直试图将我的Ionic 1应用程序迁移到Ionic 2,并且遇到了很多新的术语和问题。

我真的不明白需要get参数()以及在该函数中返回的时间和内容。

例如(To Navigate):

 static get parameters() {
    return [[NavController]];
 }

以前在较旧的离子版本中(我不确定我正在开发哪个版本),我可以导航到没有此功能的页面。在最新的离子2版本(2.0.0-beta.25)中,没有这个获取参数()函数,它只是不会导航到下一个目标页面,但没有错误。

我知道现有帖子: Angular/Ionic 2 - what is a provider and what does `static get parameters()` do?

因此,在什么场合我应该返回以及我返回什么变量?

2 个答案:

答案 0 :(得分:1)

在ES6中,依赖注入获取需要解析的类型列表,并将实例传递给类的构造函数。

必须是静态的,否则在创建实例之前 无法 >

在TypeScript中,如果应用了这些类型(或@Inject()注释),它可以从构造函数参数中获取这些类型。

按照构造函数参数列表中列出的顺序返回类的构造函数参数的类型。

有关示例,请参阅https://stackoverflow.com/a/34546344/217408

答案 1 :(得分:1)

事实上,Angular2尝试使用parameters类的ReflectionCapabilities方法找出要注入到类的构造函数中的内容:

这种方法尝试了几件事:

  • 在类型的parameters内(即类属性,即静态属性)

    @Component({
      (...)
    })
    export class SomeComponent {
      constructor(http) {
      }
    
      static get parameter() {
        return [[Http]];
      }
    }
    
  • 在该类的parameters元数据中(如果有)。它由@Inject装饰者填充。并非ES6中不支持参数装饰器

    @Component({
      (...)
    })
    export class SomeComponent {
      constructor(@Inject(Http) http) { // == http:Http
      }
    }
    
  • 在使用构造函数的参数类型内部创建的design:paramtypes元数据中。使用ES6时,由于无法使用方法参数的类型,因此无法使用此元数据。

    @Component({
      (...)
    })
    export class SomeComponent {
      constructor(http:Http) {
      }
    }
    

基于这些类型,Angular2会查找相应的提供程序以获取要注入的实例。