2017-03-13 5 views
0

サービスから設定されたプライベート変数を参照するstatic getメソッドを持つクラスがあります。ここまで私がこれまで持っていたことはありますが、私は循環的な論理に惑わされています。は、角度2の静的メソッドからプライベート変数を参照しています

@Injectable() 
export class UserPermissions { 
    private static _userPermissions: PermissionsModel; 
    private static get userPermissions(): PermissionsModel { 
     if (!UserPermissions._userPermissions) { 
      UserPermissions.setPermissions(); 
     } 
    } 

    private static set UserPermissions() { 
     let id = SessionStorage.getItem(SS_USER_ID); 

     // How do I setup profileService? 
     // Normally, I would have a constructor that would be: 
     // constructor(private profileService: ProfileService) {} 
     // and the class would have @Component({ providers: [ProfileService] }) 

     profileService.getPermissions(id).subscribe(
      permissions => UserPermissions._userPermissions = permissions; 
     ); 
    } 

    public static hasPermissions(permissionCode: string): boolean { 
     let index = UserPermissions.userPermissions().permissions 
      .findIndex(permission => permission.code == permissionCode); 
     return index >= 0; 
    } 
} 
+1

「静的」は使用しないでください。 –

+0

**あなたの名前の下にいくつかの欠陥を持つ不眠の夜があります。 – Aravind

答えて

1

私はあなたの言うことを聞いていますが、別のサービスにサービスを注入する方法を尋ねていますか? その場合、サービスを使用するコンポーネントに注入されている限り、コンストラクタインジェクションを行うことができます。言い換えれば

:あなたはサービスが(providersを使用して)serviceBと呼ばれる注入ComponentAを持っている場合、あなたのコード(constructor(private profileService: ProfileService) {})にコメントとして、その後、ComponentAのすべての子供たちは、コンストラクタ・インジェクションを使用してserviceBインスタンスを取得することができます。

依存性注入についてのAngular architectureのセクションを読むことをお勧めします。

私はそれが助けてくれることを願っています。私が実際にあなたが求めていたものでした。

関連する問題