2016-05-20 10 views
3

В новом маршрутизаторе с угловым 2 они удалили интерфейс CanReuse. Есть ли способ достичь этой функциональности (перезагрузка силовой части) другой функцией маршрутизатора?Угловой 2 новый маршрутизатор routerCanReuse

+0

Будет добавлено одно из следующих обновлений: –

+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), равны и будут повторно использовать компонент. В моем обходном пути я просто удаляю _routeConfig при закрытии окна, и в следующий раз он создаст новый экземпляр компонента.

3

Теперь есть RouteReuseReuse стратегия, которую вы можете заменить самостоятельно, если вы хотите, чтобы вновь сделать маршрут по навигации, вы можете сделать это так

1.Define Пользовательские стратегии (эта стратегия работает так же, как старый-маршрутизатор)

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 { 
} 
Смежные вопросы