为什么要写static get parameters()

Why do I need to write static get parameters()

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

我真的不明白 get parameters() 的必要性,以及在该函数中 return 什么时候和什么变量。

例如(导航):

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

以前在旧的 ionic 构建中(我不确定我正在开发哪个版本),我可以导航到没有此功能的页面。在最新的 ionic 2 build(2.0.0-beta.25) 中,没有这个 get parameters() 函数,它不会导航到下一个目标页面,但没有错误。

我知道一个现有的 post:

因此,在什么情况下我应该return,我应该return什么变量?

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

它必须是静态的,否则它们无法被读取创建一个实例之前。

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

Return class 的构造函数参数类型,按照它们在构造函数参数列表中列出的顺序排列。

有关示例,请参阅

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

这个方法尝试了几件事:

  • 内的parameters类型(即class属性,即static属性)

    @Component({
      (...)
    })
    export class SomeComponent {
      constructor(http) {
      }
    
      static get parameter() {
        return [[Http]];
      }
    }
    
  • parameters 元数据中 class(如果有)。它由 @Inject 装饰器填充。并不是说 ES6

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

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

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