본문 바로가기
IT/개발

[Angular] Same Url Reload

by aloveu 2024. 10. 21.
반응형

안녕하세요! aloveu입니다.

오랜만에 블로그 글을 씁니다. 한동안 바쁘기도 했고 블로그에 흥미를 잠시 잃어 소홀했습니다. ㅠ

 

프로젝트를 진행하다가 정리할 게 있어서 잠깐 블로그에 들린 김에 끄적여봅니다.

 

Angular에서 동일한 url로 이동할 때는 아무런 반응을 하지 않습니다.
메인에서 로고를 눌렀을 때 새로 API를 당겨 와야하는 니즈가 있어서 찾다 보니 여러 가지 방법이 있었습니다. 

우선 첫번째는 다른 라우터를 이동했다가 다시 요청한 url로 돌아오는 방법이에요.

this.router.navigateByUrl('/', {skipLocationChange: true}).then(() =>
    this.router.navigate([this.router.url]));

 

단점은 루트(/)로 갔다가 다시 돌아오는 거기 때문에 메인에서 메인은 Reload 하지 않습니다. 다른 dummy router를 생성하면 되긴 합니다만 가끔 meta title이 안 바뀐다거나 자잘한 이슈가 있습니다. 

 

그래서 찾은 두번째,

앵귤러 라우터에는 shouldReuseRoute라는 메서드가 있는데 이걸 false로 하게 되면 라우트를 재사용하지 않습니다.

따라서 같은 라우트면 reload를 하게 되는 거죠.

private saveRouterStrategyReuseLogic: any;

ngOnInit() {
    this.saveRouterStrategyReuseLogic = this.router.routeReuseStrategy.shouldReuseRoute;
    this.router.routeReuseStrategy.shouldReuseRoute = (future, curr) => { return false; };
}

ngOnDestroy() {
    this.router.routeReuseStrategy.shouldReuseRoute = 
this.saveRouterStrategyReuseLogic;

}


리로드를 해야 하는 페이지 진입 때 기존 shouldReuseRoute를 어떤 변수에 저장한 후에 false로 설정을 해주고 나서 페이지를 떠날 때 다시 저장한 값을 다시 바인딩하는 방법입니다. 

 

뭔가... 짜치는 느낌이 납니다.

저 shouldReuseRoute를 상속받아 커스텀한 다음에 처리하는 게 훨씬 사용하기 좋아 보입니다.
아래 세 번째 방법처럼 이요.

export const routes: Routes = [
	{
		path: '',
		loadComponent: ()=> import(....)....,
		data:{
        	shouldReuse: false,
        }
	},
	...
]

 

우선 reuse를 해야 하는 라우트 파일 데이터에 boolean값을 추가를 해주고요.

appConfig 파일에서 BaseRouteReuseStrategy를 상속받아서 CustomRouteReuseStrategy를 만들어주고, providers에 추가해줍니다. 

class CustomRouteReuseStrategy extends BaseRouteReuseStrategy {
    shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot) {
        return future.data.shouldReuse ?? future.routeConfig === curr.routeConfig;
    }
}


export const appConfig: ApplicationConfig = {
    providers: [
        { provide: RouteReuseStrategy, useClass: CustomRouteReuseStrategy },
		...
	],
};

 

그러면 route 파일 > data에서 shouldReuse가 false인 라우트만 reload가 적용됩니다. 

 

그럼 여기까지 읽어주셔서 감사합니다.

반응형

'IT > 개발' 카테고리의 다른 글

윈도우에서 iOS 사파리 디버깅 해보기  (0) 2025.04.02
Nuxt 개발 삽질기  (2) 2025.04.01
3rd Party Cookie 차단??  (42) 2024.06.11
[CSS] Cascade Layers 정리  (93) 2024.05.13
[JS] 반복문들의 성능 체크  (79) 2024.05.09