Angular 프로젝트에서 일하고 있습니다. 구성 요소에서 새로 고침 작업에 어려움을 겪고 있습니다.
버튼 클릭시 라우터의 구성 요소를 새로 고침하고 싶습니다. 나는 그것을 클릭하면 새로 고침 버튼이 있습니다. 구성 요소 / 라우터를 새로 고쳐야합니다.
나는 시도 window.location.reload()
하고 location.reload()
이 두 내 필요에 적합하지 않습니다. 아는 사람이 있으면 도와주세요.
Angular 프로젝트에서 일하고 있습니다. 구성 요소에서 새로 고침 작업에 어려움을 겪고 있습니다.
버튼 클릭시 라우터의 구성 요소를 새로 고침하고 싶습니다. 나는 그것을 클릭하면 새로 고침 버튼이 있습니다. 구성 요소 / 라우터를 새로 고쳐야합니다.
나는 시도 window.location.reload()
하고 location.reload()
이 두 내 필요에 적합하지 않습니다. 아는 사람이 있으면 도와주세요.
답변:
아래와 같이 내 코드를 조사하고 수정 한 후 스크립트가 저에게 효과적이었습니다. 방금 조건을 추가했습니다.
this.router.navigateByUrl('/RefreshComponent', { skipLocationChange: true }).then(() => {
this.router.navigate(['Your actualComponent']);
});
"your actualComponent"
변수 로 대체 했습니다. 에 this.location.path()
대한 호출 전에 변수가로 설정 됩니다 navigateByUrl
. 이렇게하면 호출 구성 요소에서 매개 변수를 전달하거나 경로를 복제 / 전달할 필요가 없습니다.
'/'
where /RefrshComponent
is를 사용해도 괜찮을 것이며 , [Your actualComponent"]
.NET과 같이 다시로드하려는 URL (및 / 또는 매개 변수)을 전달하기 만하면됩니다 this.router.navigate(["/items"])
. 이 해킹은 기본적으로 최상위 URL로 리디렉션 된 다음, 대부분의 사용자에게 눈에 띄지 않는 의도 된 URL로 매우 빠르게 되돌아 가며이를 달성하기위한 가장 우아한 해킹으로 보입니다.
'/'
내 더미 경로로 사용하면 redirectTo
내 app-routing.module.ts가 ''
(빈 문자열) 경로에서 리디렉션 되고 중지되며 navigate()
호출 의 완료 경로로 진행되지 않습니다 . 존재하지 않는 문자열 (예 :) /foo
을 내 더미 경로로 사용하면 redirectTo
내 app-routing.module.ts가 리디렉션하는 위치 (를 통해 )로 이동하고 **
(다른 모든 항목) 실제 경로로 이동하지 않고 다시 중지됩니다. 흥미롭게도 URL 표시 줄이 실제 경로로 변경됩니다. 여기서 무엇이 다른지 생각하십니까?
this.ngOnInit (); 사용하십시오 . 전체 페이지를 다시로드하는 대신 동일한 구성 요소를 다시로드합니다 !!
DeleteEmployee(id:number)
{
this.employeeService.deleteEmployee(id)
.subscribe(
(data) =>{
console.log(data);
this.ngOnInit();
}),
err => {
console.log("Error");
}
}
이것을 필요한 구성 요소의 생성자에 코드에 추가하면 저에게 효과적이었습니다.
this.router.routeReuseStrategy.shouldReuseRoute = function () {
return false;
};
this.mySubscription = this.router.events.subscribe((event) => {
if (event instanceof NavigationEnd) {
// Trick the Router into believing it's last link wasn't previously loaded
this.router.navigated = false;
}
});
있는지에 대한 확인 unsubscribe
이에서 mySubscription 에서 ngOnDestroy()
.
ngOnDestroy() {
if (this.mySubscription) {
this.mySubscription.unsubscribe();
}
}
자세한 내용은이 스레드를 참조하십시오-https: //github.com/angular/angular/issues/13831
다행히 Angular 5.1 이상을 사용하는 경우 기본 지원이 추가되었으므로 더 이상 해킹을 구현할 필요가 없습니다. RouterModule 옵션에서 onSameUrlNavigation을 'reload' 로 설정하기 만하면됩니다 .
@ngModule({
imports: [RouterModule.forRoot(routes, {onSameUrlNavigation: ‘reload’})],
exports: [RouterModule],
})
자세한 내용은 여기에서 찾을 수 있습니다. https://medium.com/engineering-on-the-incline/reloading-current-route-on-click-angular-5-1a1bfc740ab2
router.onSameUrlNavigation = 'reload'
주입 된 Router의 속성도 사용할 수 있습니다 .
onSameUrlNavigation
Guards / Resolvers를 다시 호출하고 이미 라우팅 된 구성 요소를 다시로드하지 않습니다. 이에 대한 자세한 내용은 github.com/angular/angular/issues/21115 를 참조하십시오 . 이 솔루션은 Guards / Resolvers를 사용하는 더 크고 복잡한 애플리케이션에서 작동하지만 간단한 예제에서는 실패합니다.
이것은 상자에서 약간 벗어난 것이며 이것이 도움이되는지 여부는 모르겠지만 시도해 보았습니다.
this.ngOnInit();
그것의 기능 그래서 당신이 그것에있는 모든 코드는 새로 고침처럼 호출됩니다.
그냥 이렇게 : (각도 9의 경우)
import { Inject } from '@angular/core';
import { DOCUMENT } from '@angular/common';
constructor(@Inject(DOCUMENT) private document: Document){ }
someMethode(){ this.document.location.reload(); }
이는 해킹을 통해 달성 할 수 있으며 일부 샘플 구성 요소로 이동 한 다음 다시로드 할 구성 요소로 이동합니다.
this.router.navigateByUrl('/SampleComponent', { skipLocationChange: true });
this.router.navigate(["yourLandingComponent"]);
html 파일
<a (click)= "getcoursedetails(obj.Id)" routerLinkActive="active" class="btn btn-danger">Read more...</a>
ts 파일
getcoursedetails(id)
{
this._route.navigateByUrl('/RefreshComponent', { skipLocationChange: true }).then(() => {
this._route.navigate(["course",id]);
});
이와 같이 각도 2의 페이지를 새로 고치는 다른 방법
은 f5처럼 보입니다.
import { Location } from '@angular/common';
constructor(private location: Location) {}
pageRefresh() {
location.reload();
}