Angular에서 현재 페이지를 새로 고치는 방법은 무엇입니까? 방법 소개

青灯夜游
풀어 주다: 2021-04-08 11:59:15
앞으로
4014명이 탐색했습니다.

이 글에서는 현재 페이지를 새로 고치는 여러 가지 Angular 방법을 공유하겠습니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.

Angular에서 현재 페이지를 새로 고치는 방법은 무엇입니까? 방법 소개

Angular가 현재 페이지를 새로 고치는 여러 가지 방법


기본적으로 Angular 라우터는 현재 URL로 이동하라는 요청을 받으면 무시합니다.

<a routerLink="/heroes" routerLinkActive="active">Heroes</a>
로그인 후 복사

같은 링크를 반복해서 클릭하면 페이지가 새로고침되지 않습니다.

onSameUrlNavigation 속성은 경로 재로드를 지원하기 위해 Angular 5.1에서 제공됩니다.

@NgModule({
  imports: [RouterModule.forRoot(routes, {onSameUrlNavigation: &#39;reload&#39;})],
  exports: [RouterModule]
})
로그인 후 복사

onSameUrlNavigation에는 'reload'와 'ignore'라는 두 가지 선택 값이 있으며 기본값은 'ignore'입니다. 그러나 onSameUrlNavigation을 'reload'로 변경하면 RouterEvent 이벤트만 트리거되며 페이지는 다시 로드되지 않습니다. 계속하기 전에 라우터 추적을 활성화하고 브라우저 콘솔에서 라우팅 이벤트 로그를 확인합니다.

@NgModule({
  imports: [RouterModule.forRoot(routes, {onSameUrlNavigation: &#39;reload&#39;, enableTracing: true})],
  exports: [RouterModule]
})
로그인 후 복사

onSameUrlNavigation이 구성되지 않은 경우 동일한 링크를 다시 클릭하면 onSameUrlNavigation을 '다시 로드'로 구성한 후 로그가 출력되지 않는 것을 볼 수 있습니다. NavigationStart, RoutesRecognized, GuardsCheckStart, GuardsCheckEnd, ActivationEnd, NavigationEnd 등의 이벤트가 포함된 로그를 출력합니다.

추천 관련 튜토리얼: "angular tutorial"

다음은 현재 페이지를 새로 고치는 여러 가지 방법을 소개합니다:

NavigationEnd

1 onSameUrlNavigation을 'reload'로 구성

2. event

라우터 이벤트를 구독하고 NavigationEnd에서 데이터를 다시 로드하고 구성 요소가 삭제되면 구독을 취소하세요.

export class HeroesComponent implements OnDestroy {
  heroes: Hero[];
  navigationSubscription;

  constructor(private heroService: HeroService, private router: Router) {
    this.navigationSubscription = this.router.events.subscribe((event: any) => {
      if (event instanceof NavigationEnd) {
        this.init();
      }
    });
  }

  init() {
    this.getHeroes();
  }

  ngOnDestroy() {
    if (this.navigationSubscription) {
      this.navigationSubscription.unsubscribe();
    }
  }
  ...
}
로그인 후 복사

이 방법을 사용하면 필요에 따라 페이지를 새로 고치도록 구성할 수 있지만 코드가 번거롭습니다.

RouteReuseStrategy

1. onSameUrlNavigation을 'reload'로 구성

2. Route를 재사용하지 않고 RouteReuseStrategy를 사용자 정의합니다. 구현하는 방법에는 두 가지가 있습니다.

코드에서 전략 변경:

constructor(private heroService: HeroService, private router: Router) {
  this.router.routeReuseStrategy.shouldReuseRoute = function () {
    return false;
  };
}
로그인 후 복사

Angular 애플리케이션 라우터 Singleton 개체이므로 이 방법을 사용하면 한 구성 요소의 정책을 변경하면 다른 구성 요소에 영향을 주지만 브라우저에서 페이지를 새로 고친 후 라우터가 다시 초기화되므로 혼동이 쉽게 발생할 수 있으므로 권장되지 않습니다.

사용자 정의 RouteReuseStrategy:

import {ActivatedRouteSnapshot, DetachedRouteHandle, RouteReuseStrategy} from &#39;@angular/router&#39;;

export class CustomReuseStrategy implements RouteReuseStrategy {

  shouldDetach(route: ActivatedRouteSnapshot): boolean {
    return false;
  }

  store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle | null): void {
  }

  shouldAttach(route: ActivatedRouteSnapshot): boolean {
    return false;
  }

  retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle | null {
    return null;
  }

  shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {
    return false;
  }

}
로그인 후 복사

사용자 정의 RouteReuseStrategy 사용:

@NgModule({
  imports: [RouterModule.forRoot(routes, {onSameUrlNavigation: &#39;reload&#39;})],
  exports: [RouterModule],
  providers: [
    {provide: RouteReuseStrategy, useClass: CustomReuseStrategy}
  ]
})
로그인 후 복사

이 방법은 더 복잡한 경로 재사용 전략을 구현할 수 있습니다.

ResolveResolve를 사용하여 서버에서 미리 데이터를 가져오면 경로가 활성화되기 전에 데이터가 준비됩니다.

1. ResolverService 구현

구성 요소의 초기화 코드를 Resolve로 전송:

import {Injectable} from &#39;@angular/core&#39;;
import {ActivatedRouteSnapshot, Resolve, RouterStateSnapshot} from &#39;@angular/router&#39;;
import {Observable} from &#39;rxjs&#39;;

import {HeroService} from &#39;../hero.service&#39;;
import {Hero} from &#39;../hero&#39;;

@Injectable({
  providedIn: &#39;root&#39;,
})
export class HeroesResolverService implements Resolve<Hero[]> {
  constructor(private heroService: HeroService) {
  }

  resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Hero[]> | Observable<never> {
    return this.heroService.getHeroes();
  }
}
로그인 후 복사

라우팅을 위한 해석기 구성:

path: &#39;heroes&#39;, component: HeroesComponent, canActivate: [CanActivateAuthGuard], resolve: {heroes: HeroesResolverService}
로그인 후 복사

2. 대신 구성 요소 코드를 수정하고 Read에서 데이터를 가져옵니다.

constructor(private heroService: HeroService, private route: ActivatedRoute) {
}

ngOnInit() {  this.route.data.subscribe((data: { heroes: Hero[] }) => {    this.heroes = data.heroes;
  });
}
로그인 후 복사

3. 'reload'


4, runGuardsAndResolvers를 'always'

runGuardsAndResolvers 선택적 값으로 구성: 'paramsChange', 'paramsOrQueryParamsChange', 'always'

{path: &#39;heroes&#39;, component: HeroesComponent, canActivate: [CanActivateAuthGuard], resolve: {heroes: HeroesResolverService}, runGuardsAndResolvers: 'always'}
로그인 후 복사

timestampgive 라우터가 시간 매개변수를 추가합니다. 어어어어어

그런 다음 구성 요소에서 queryParamMap을 구독하세요.

<a (click)="gotoHeroes()">Heroes</a>
로그인 후 복사
더 많은 프로그래밍 관련 지식을 보려면

프로그래밍 비디오

를 방문하세요! !

위 내용은 Angular에서 현재 페이지를 새로 고치는 방법은 무엇입니까? 방법 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:51cto.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿