2017-08-04 36 views
0

角4.3.1如何改變與相同分量的路徑沒有頁面重載

我看起來像這樣的路線:

{ path: ':department', loadChildren: 'app/pages/pages.module#PagesModule' } 

而且pagesRoutes

{ 
    path: '', 
    component: PagesComponent, 
    pathMatch: 'full', 
}, 
{ 
    path: ':id', 
    component: PagesComponent, 
} 

說我瀏覽到/department-name。 PagesComponent被加載,我做了一個查找來找到部門的默認頁面並加載內容。如果我然後導航到/department-name/1PagesComponent正在被重新初始化和屏幕重新加載,我想找到一種方法,不要重新加載這兩個路線變化之間。在這一點上,如果我導航到/department-name/2,內容會發生變化,而不會像我想要的那樣重新加載頁面。有沒有一種方法可以重新組織物品,以便在/department-name/department-name/id之間導航時不會遇到組件重新加載?

我發現這hack,我不認爲可以工作,因爲:department是一個動態生成的路線。除非有一種方法可以讓我在路由器配置中獲得該參數?

還有this SO編寫使用RouteReuseStrategy,但它使用可用路由的靜態數組重新使用。如果我可以從HTTP調用構建該數組,我可以做到這一點。我想我可以在初始應用程序加載時做到這一點?

有什麼更好的建議嗎?感謝您的期待。

+0

看看https://stackoverflow.com/questions/41393095/angular-2-route-parameter-changes-reload-the-same-page –

+0

謝謝,@ Tim.Burnell。我認爲這個問題是指我遇到的相反問題。我已經訂閱了PageComponent中的參數,並且效果很好。問題是,當我將路由從'/ department'改爲'/ department/1'時,PageComponent被重新初始化,導致頁面重繪並且ngOnInit被再次調用。 – andyrue

回答

1
// First import in your component:  
import { Router, NavigationEnd } from '@/router'; 

// Then in your component class constructor use below code: 

constructor(private router: Router) { 
    this.router.routeReuseStrategy.shouldReuseRoute = function(){ 
     return false; 
    }; 
    this.router.events.subscribe((evt) => { 
     if (evt instanceof NavigationEnd) { 
      this.router.navigated = false; 
     } 
    }); 
    } 

// Finally in any of your method, where you want to refresh use below code 
    for refresh 
any_method_name() { 
    this.router.navigate(['/']); 
} 

**沒有黑客或東西,它的正式解決方案加載組件沒有刷新。 **

相關問題