2017-08-24 16 views
1

長いタイトルのために申し訳ありません。私はngBootstrapとUIRouterを使用しています。Ng2StateDeclarationのサブクラスを作成しようとしていますが、それは入力して終了するときにngbModalを開き、閉じます。私は継承なしでこれを簡単に行うことができますが、私はちょっとした解決策をとっています。インターフェイスを実装するTypeScriptクラスを拡張し、親クラスにいくつかの実装を残す方法はありますか?

私が持っているものHERESに

var modalInstance:NgbModalRef; 
class ModalStateDeclaration implements Ng2StateDeclaration { 
    name:string; 
    url:string; 
    onEnter(transition: Transition, state: Ng2StateDeclaration) { 
     modalInstance = modalService.open(SomeComponent); 

     for (var key in transition.params()) { 
      modalInstance.componentInstance[key] = transition.params()[key]; 
     } 

     var currentState = transition.from().name; 
     modalInstance.result.catch(function(reason) { 
      if (currentState) { 
       window.history.back(); 
      } else { 
       stateService.go('home'); 
      } 
     }); 
    } 

    onExit() { 
     modalInstance.close(); 
    } 
} 

export const modalBookState:ModalStateDeclaration = { 
    name: 'modalBookState', 
    url: '/b/:id' 
}; 

活字体はmodalBookStateonEnteronExitが欠落していることを私に語っています。 onEnteronExitの実装をModalStateDeclarationからどのように使用できますか? super()でそれらを実装する必要がありますか?

答えて

0

最も簡単な方法は、アップだけで新しいクラスがそれにオブジェクトリテラルを割り当て、あなたが本当にリテラルの代わりに、あなたをインスタンスオブジェクトを作成する場合は、クラス

class ModalStateDeclaration implements Ng2StateDeclaration { 
    constructor(public name:string, public url:string) {} 
    ... 
} 
// The type annotation is optional you could remove :ModalStateDeclaration, I left it in for clarity 
export const modalBookState:ModalStateDeclaration = new ModalStateDeclaration('modalBookState', '/b/:id'); 

にコンストラクタを追加しないことであろうそれは、実行時にinstanceofチェックに失敗しますので、私は直接、オブジェクトリテラルを使用しないことをお勧めします、またはnew ModalStateDelcaration(...)何でもしたい

export const modalBookState:ModalStateDeclaration = { 
    onEnter: ModalStateDeclaration.prototype.onEnter, 
    onExit: ModalStateDeclaration.prototype.onExit, 
    name: 'modalBookState', 
    url: '/b/:id' 
}; 
0

:クラスあなたはこのような何かを行うことができます。私はこのようなものだろう

const modalBookStateOptions: Partial<ModalStateDeclaration> = { 
    name: 'modalBookState', 
    url: '/b/:id' 
} 

タイプPartial<ModalStateDeclaration>modalBookStateOptionsModalStateDeclarationの性質の一部を有することを意味します。 (Partial<T>TypeScript Handbookに記載されています)。

その後、あなたはクラスの新しいインスタンスに部分オブジェクトをマージすることで、あなたの実際のModalStateDeclarationを作成することができます。

export const modalBookState: ModalStateDeclaration = Object.assign(new ModalStateDeclaration, modalBookStateOptions); 

あり、これを行うために他の方法がある(@Titianは、いくつかの他のオプションを与えた)が、これはあります私はそれについてどうやって行くのですか?

幸運を祈る!

関連する問題