私は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 /RefrshComponent
isを使用して問題なく使用[Your actualComponent"]
できますthis.router.navigate(["/items"])
。そのため、リロードするURL(および/またはパラメータ)を渡すだけです。このハックは基本的に最上位の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'
注入されたルーターのプロパティも使用できます。
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();
}