2016-05-20 16 views
3

新しい角型ルータでは、CanReuseインターフェイスを削除しました。ルータの別の機能でこの機能(コンポーネントの再ロードを強制する)を実現する方法はありますか?角2の新しいルータrouterCanReuse

+0

次のアップデートの1つで追加されます –

+0

コンポーネントをリロードするための回避策はありますか? –

答えて

0

私は同じ問題(新しいコンポーネントの代わりにコンポーネントを再利用する)を持っていました。

現在の角度2バージョンには何も含まれていないため、私は回避策があります。

私の場合は、モーダルウィンドウを閉じるときにコンセントコンポーネントを破棄したいと思っています。

$('#mymodal_window').on("hide.bs.modal",()=>{ 
    //destroy manually 
    for(var o of this.route.parent.children){ 

     if(o.outlet=="myoutletname") 
     { 
      var s:any = o.snapshot; 
      s._routeConfig = null; 
     } 
    } 
}); 

内部角度チェックスナップショットは、(それだけ_routeConfigを比較)等しく、コンポーネントを再利用するかどうか。私の回避策では、単にwindow-closeで_routeConfigを削除し、次回にコンポーネントの新しいインスタンスを作成します。

3

は今、あなたはこの

1.Defineカスタム戦略(この戦略の作品のようにそれを行うことができ、あなたはナビゲーションのルートを再レンダリングしたい場合は、ご自身で置き換えることができRouteReuseReuse戦略、がありますただ

export class CustomReuseStrategy implements RouteReuseStrategy { 
     shouldDetach(route: ActivatedRouteSnapshot): boolean { return false; } 
     store(route: ActivatedRouteSnapshot, detachedTree: DetachedRouteHandle): void {} 
     shouldAttach(route: ActivatedRouteSnapshot): boolean { return false; } 
     retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle { return null; } 
     shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean { 
     if(future.routeConfig !== curr.routeConfig) { 
      return false; 
     } else if(Object.keys(future.params).length !== Object.keys(curr.params).length || 
        Object.keys(future.queryParams).length !== Object.keys(curr.queryParams).length) { 
      return false; 
     } else { 
      return Object.keys(future.params).every(k => future.params[k] === curr.params[k]) && 
       Object.keys(future.queryParams).every(k => future.queryParams[k] === curr.queryParams[k]); 
     } 
     } 
    } 

2.Override /カスタム戦略を提供

NgModule({ 
    imports: [...] 
    declarations: [...], 
    providers: [ 
     {provide: RouteReuseStrategy, useClass: CustomReuseStrategy} 
    ] 
)} 
export class AppModule { 
} 
)古いルータのような
関連する問題