2016-04-18 10 views
3

したがって、Angular 2とTypescriptを使用しているメンバーのプロパティがどのように設定されているか混乱しているイオン2プロジェクトを見ています。以下の例を見ると、Angularは自動的にコンストラクタ引数の依存関係を挿入します。 navの場合、インスタンスメンバーnavをコンストラクタによって渡されているものに明示的に設定しています。 Firebase認証の場合、明示的にメンバー変数に設定するのではありませんが、ログインメソッドでthis.auth経由で引き続きアクセスできます。 this.navで同じことを試しても、インスタンス変数を明示的に設定しない限りうまくいきません。 privateキーワードをコンストラクタパラメータdoで使用すると、クラスのプロパティ定義と関数パラメータでプライベートキーワードを宣言するのは冗長ですか?それらが同じ名前を持っていれば、それは魔法のようにコンストラクタ変数をクラスプロパティにバインドしていますか?角度2のタイプスクリプトのメンバープロパティとコンストラクタの構文

export class LoginPage { 
    nav:NavController; 
    private auth: FirebaseAuth; 

    constructor(nav:NavController, private auth: FirebaseAuth) { 
    this.nav = nav; // if we don't do this, the setRoot below in login doesn't do anything 
    //this.auth = auth; // how come we don't have to set the member variable here and it's still available in the login method 
    } 

    login() { 
    this.auth.login().then(authData =>{ 
     this.nav.setRoot(TabsPage); 
    }); 
    } 
} 
+0

見る[ここでの説明](https://www.stevefenton.co.uk/2013/04/stop-manually-assigning-typescript-constructor-parameters/) – drewmoore

答えて

5

お知らせprivate auth: FirebaseAuthprivateキーワード、それはコンストラクタの引数から初期化クラスのプロパティを宣言するための省略形構文は次のとおりです。 それは同じです:

private auth:FirebaseAuth; 
constructor(auth: FirebaseAuth) {this.auth = auth;} 
+0

ます'private auth:FirebaseAuth'メンバを指定する必要はありません。これはコンストラクタで(private | public | protected)パラメータを使用するときに暗黙的にオブジェクト上に作成されます。 –