javascript - Angular - 在自路由更改时重新创建组件

标签 javascript angular angular-routing

我有一个带导航栏的 Angular 应用程序。当用户重新单击与当前页面匹配的链接时,我收到了刷新组件数据的请求。稍作阅读后,我了解到我需要将 onSameUrlNavigation 设置为“重新加载”并捕获组件中的事件并刷新其中的数据。虽然我知道这是最好的解决方案并且不需要重新创建组件,但我正在尝试为我的所有路由找到一些快速修复,而无需编写大量代码来支持此行为。当新路线与当前路线匹配时,有没有一种方法可以强制销毁所有组件并重新创建?也许在 router-outlet 或其他一些快速修复上创建某种指令?

最好的, 塔尔休米

最佳答案

我刚遇到一个问题,从 /user/1/roles/user/2/roles 的导航重新使用了与 关联的组件/Angular 色。这是因为默认情况下,Angular 更喜欢尽可能重用组件,以提高内存效率。

首先创建一个CUSTOM ROUTE REUSE STRAGETY,如下所示:

import { ActivatedRouteSnapshot, DetachedRouteHandle, RouteReuseStrategy } from '@angular/router';

export class DefaultRouteReuseStrategy implements RouteReuseStrategy {
  shouldDetach(route: ActivatedRouteSnapshot): boolean {
    return false;
  }
  store(route: ActivatedRouteSnapshot, detachedTree: DetachedRouteHandle): void {
  }
  shouldAttach(route: ActivatedRouteSnapshot): boolean {
    return false;
  }
  retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle|null {
    return null;
  }
  shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {
    return false; // <-- Here is the critical line of code which forces re-creation of the component
  }
}

并将其注册到您的 AppModule 中,如下所示:

@NgModule({
  providers: [
    {
      provide: RouteReuseStrategy,
      useClass: DefaultRouteReuseStrategy,
    },
  ],
})
AppModule {}

关于javascript - Angular - 在自路由更改时重新创建组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61854387/

相关文章:

angular-cli 本地低版本

angular - Angular 中两个以上领域的双向绑定(bind)

angular - 将输入数据传递到延迟加载的 Angular 模块中

angular - 如何知道 Angular 路由器是否已注册路由

angular - 如何将额外参数传递给 RxJS 映射运算符

Angular 5 - 在运行时动态加载模块(编译时未知)

javascript - 响应式字体大小

javascript - 如何提高我网站的 IE6/7 JS 性能?

javascript - 在文本消息中从底部滚动到顶部,例如使用 React 模态

javascript - 如何在Wordpress中调用ajax