[angular] 라우터 탐색은 동일한 페이지에서 ngOnInit를 호출하지 않습니다.

router.navigate일부 쿼리 문자열 매개 변수를 사용하여 동일한 페이지에서 호출 하고 있습니다. 이 경우 ngOnInit()전화하지 않습니다. 기본적으로 설정되어 있습니까? 아니면 다른 항목을 추가해야합니까?



답변

당신은 주입 ActivatedRoute하고 구독 할 수 있습니다params

constructor(route:ActivatedRoute) {
  route.params.subscribe(val => {
    // put the code from `ngOnInit` here
  });
}

라우터는 다른 경로로 이동할 때만 구성 요소를 파괴하고 재생성합니다. 경로 매개 변수 또는 쿼리 매개 변수 만 업데이트되지만 경로가 동일하면 구성 요소가 파괴되고 다시 생성되지 않습니다.

구성 요소를 강제로 다시 만드는 또 다른 방법은 사용자 지정 재사용 전략을 사용하는 것입니다. Angular2 라우터 2.0.0이 다른 매개 변수로 동일한 URL을로드 할 때 구성 요소를 다시로드하지 않음을 참조하십시오 . (아직 사용 가능한 정보가 많지 않은 것 같습니다. 구현 방법)


답변

라우터에서 재사용 전략을 조정할 수 있습니다.

constructor(private router: Router) {
    // override the route reuse strategy
    this.router.routeReuseStrategy.shouldReuseRoute = function() {
        return false;
    };
}


답변

각도 9

나는 다음을 사용했고 그것은 효과가 있었다.

onButtonClick() {
    this.router.routeReuseStrategy.shouldReuseRoute = function () {
        return false;
    }
    this.router.onSameUrlNavigation = 'reload';
    this.router.navigate('/myroute', { queryParams: { index: 1 } });
}


답변

페이지를 다시로드해야합니까? 이것은 내 솔루션입니다 : 내가 변경 한 @NgModule을 (에 앱 routing.module.ts의 내 경우에는 파일) :

@NgModule({
  imports: [RouterModule.forRoot(routes, {onSameUrlNavigation: 'reload'})] })


답변

NgOnInit인스턴스가 생성 될 때 한 번 호출됩니다. 동일한 인스턴스에 대해 NgOnInit다시 호출되지 않습니다. 이를 호출하려면 생성 된 인스턴스를 파괴해야합니다.


답변

탐색 방법에서

this.router.routeReuseStrategy.shouldReuseRoute = () => false;
this.router.onSameUrlNavigation = 'reload';
this.router.navigate(['/document'], {queryParams: {"search": currentSearch}});


답변

나는 같은 문제가 있었고 추가로 경고를 받았습니다.

did you forget to call `ngZone.run()`

사이트는 최상의 솔루션을 제공했습니다.

import { Router } from '@angular/router';
import { NgZone } from '@angular/core';

...

  constructor(
    private ngZone:NgZone,
    private _router: Router
  ){ }

  redirect(to) {
    // call with ngZone, so that ngOnOnit of component is called
    this.ngZone.run(()=>this._router.navigate([to]));
  }