2016-04-19 25 views
0

私はIonic 1アプリケーションをIonic 2に移行しようとしており、新しい用語や問題に遭遇しています。static getパラメータを書く必要があるのはなぜですか?

私は実際にパラメータを取得する必要はありません()と、その関数でいつどのような変数を返すのか分かりません。

例えば(ナビゲートする):

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

を以前の古いイオンビルドで(私は時に開発されたバージョンか分からない)、私はこの機能がないページに移動することができます。最新のionic 2ビルド(2.0.0-beta.25)では、parameters()関数を使用しないと、次のターゲットページに移動することはありませんが、エラーはありません。

私は、既存のポストに気づいてよ: Angular/Ionic 2 - what is a provider and what does `static get parameters()` do?

したがって、どのような機会に、私は返すべきであると私は何の変数を返すのですか?

答えて

1

ES6依存性注入では、インスタンスを解決してクラスのコンストラクタに渡すために必要な型のリストを取得します。

それはそう、彼らはがインスタンスが作成される前に読み取ることができませんでした、静的である必要があります。

TypeScriptでは、これらの型がコンストラクタパラメータ(適用される場合は@Inject()アノテーション)から取得できます。

クラスのコンストラクタパラメータの型を、コンストラクタパラメータリストにリストされている順に返します。

例としてhttps://stackoverflow.com/a/34546344/217408を参照してください。実際に

1

、Angular2はReflectionCapabilitiesクラスのparametersメソッドを使用して、クラスのコンストラクタに注入するために何かを見つけるためにしようとします:

この方法は、いくつかのことをしようとします:

  • parameters(すなわち、クラスprクラスのparametersメタデータ内operty、すなわち静的プロパティ)

    @Component({ 
        (...) 
    }) 
    export class SomeComponent { 
        constructor(http) { 
        } 
    
        static get parameter() { 
        return [[Http]]; 
        } 
    } 
    
  • あれば。それは@Injectデコレータによって占有されています。そのパラメータのデコレータは、内部コンストラクタのパラメータ型を使用して作成されdesign:paramtypesメタデータ内ES6

    @Component({ 
        (...) 
    }) 
    export class SomeComponent { 
        constructor(@Inject(Http) http) { // == http:Http 
        } 
    } 
    
  • でサポートされていないわけではありません。 ES6では、メソッドのパラメータの型を使用できないため、このメタデータは使用できません。これらのタイプに基づいて

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

、Angular2は注入するのインスタンスを取得するためにプロバイダーに対応を探します。

関連する問題