Angular 重新加载组件不起作用

Angular reloading component does not work

我只是想在不刷新页面的情况下重新加载组件。

这是相关代码:

import { Component, VERSION, OnInit } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router'

@Component({
  selector: 'my-home',
  templateUrl: './home.component.html'
})
export class HomeComponent implements OnInit  {

  name = 'Angular ' + VERSION.major;
  time = new Date().getSeconds();

  constructor(private route: ActivatedRoute, private router: Router){

    this.router.routeReuseStrategy.shouldReuseRoute = () => false;

    this.time = new Date().getSeconds(); //updating the time on load.
  }

  ngOnInit(){
    console.log('iniit');
  }
}

在我的 html 中,我有一个按钮可以通过再次导航到 url 来重新加载组件。如有不妥请指教

<hello name="{{ name }}" time="{{time}}"></hello>
<p>
  Start editing to see some magic happen :) {{time}}
</p>

<a [routerLink]="['/home']">Go to Home </a>

当我点击按钮时,应该会因为组件重新加载而更新时间。但是每当我点击 link 时,都没有发生更新。

谁能告诉我如何在需要时重新加载组件而不重新加载我的 window(window 重新加载会破坏我的授权信息)。

Live demo

所以问题是 angular 知道您正在路由到您所在的同一页面。所以首先你必须告诉angular当你路由到你所在的同一条路线时重新加载。

像这样:

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

然后你必须告诉 angular 如果你想总是 运行 你路由守卫。 (可选)

{
  path:"home",
  component: HomeComponent,
  ... your guards ...
  runGuardsAndResolvers: "always",
}

还有更多内容,但如果您需要,here

演示: https://stackblitz.com/edit/angular-ivy-g29jum?file=src%2Fapp%2Fapp.route.module.ts