私はAngularプロジェクトに取り組んでいます。コンポーネントの更新アクションに苦労しています。
ボタンクリックでルーターのコンポーネントを更新したいと思います。更新ボタンをクリックすると、コンポーネント/ルーターを更新する必要があります。
私は試しましたがwindow.location.reload()、location.reload()これら2つは私のニーズには適していません。誰かがそれを知っているなら助けてください。
私はAngularプロジェクトに取り組んでいます。コンポーネントの更新アクションに苦労しています。
ボタンクリックでルーターのコンポーネントを更新したいと思います。更新ボタンをクリックすると、コンポーネント/ルーターを更新する必要があります。
私は試しましたがwindow.location.reload()、location.reload()これら2つは私のニーズには適していません。誰かがそれを知っているなら助けてください。
回答:
以下のようにコードを調査して変更した後、スクリプトは機能しました。条件を追加しました:
this.router.navigateByUrl('/RefreshComponent', { skipLocationChange: true }).then(() => {
    this.router.navigate(['Your actualComponent']);
}); 
    "your actualComponent"変数に置き換えました。に設定されている変数はthis.location.path()、を呼び出す前にに設定されnavigateByUrlます。そうすれば、呼び出しコンポーネントからパラメータを渡したり、ルートを複製/渡したりする必要はありません。
                    '/'where /RefrshComponentisを使用して問題なく使用[Your actualComponent"]できますthis.router.navigate(["/items"])。そのため、リロードするURL(および/またはパラメータ)を渡すだけです。このハックは基本的に最上位のURLにリダイレクトされ、その後すぐに目的のURLに戻ります。これはほとんどのユーザーには気付かれず、これを簡単に実現するための最も洗練されたハックのようです。
                    '/'ダミールートとして使用すると、redirectToapp-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'注入されたルーターのプロパティも使用できます。
                    onSameUrlNavigationは完全には明確ではありませんが、Guards / Resolverを再起動することを目的としており、すでにルーティングされているコンポーネントをリロードすることを目的としていません。詳細については、github.com / angular / angular / issues / 21115を参照してください。このソリューションは、Guards / Resolversを使用するより大規模で複雑なアプリケーションでは機能しますが、簡単な例では失敗します。
                    これは箱から出して少しだけで、これがあなたに役立つかどうかはわかりませんが、試してみました
this.ngOnInit();
その関数なので、そこにあるコードはすべて、更新のように呼び出されます。
これは、ハックを介して実現できます。サンプルコンポーネントに移動してから、リロードするコンポーネントに移動します。
this.router.navigateByUrl('/SampleComponent', { skipLocationChange: true });
this.router.navigate(["yourLandingComponent"]);
    kdo
// reload page hack methode
push(uri: string) {
    this.location.replaceState(uri) // force replace and no show change
    await this.router.navigate([uri, { "refresh": (new Date).getTime() }]);
    this.location.replaceState(uri) // replace
  }
    constructor(private router:Router, private route:ActivatedRoute ) { 
}
onReload(){
 this.router.navigate(['/servers'],{relativeTo:this.route})
}
    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]);
  }); 
    このようにAngular2でページを更新する(難しい方法)他の方法は、 
f5のようになります
 
 
import { Location } from '@angular/common';
constructor(private location: Location) {}
pageRefresh() {
   location.reload();
}