Angular 更改路由后如何保存表筛选器/页面?

Angular 更改路由后如何保存表筛选器/页面?,angular,Angular,我有一个报告表和自定义过滤器,在那里分页。然后我将路由更改为/:reportId。导航回表后,过滤器/分页被重置。仅当我从报告路线返回时(如果从其他路线返回,则重置过滤器),如何在路线更改时保存该信息。当我完全从报告路线过来时,如何钩住它 注意:我在tableComponent中的ngOnInit()中订阅服务http请求您必须在本地存储中存储信息,例如: filterData: {page1: {Paging: '', sort: [], filetype: ''}, page2: {Pagi

我有一个报告表和自定义过滤器,在那里分页。然后我将路由更改为/:reportId。导航回表后,过滤器/分页被重置。仅当我从报告路线返回时(如果从其他路线返回,则重置过滤器),如何在路线更改时保存该信息。当我完全从报告路线过来时,如何钩住它


注意:我在tableComponent中的ngOnInit()中订阅服务http请求您必须在本地存储中存储信息,例如:

filterData: {page1: {Paging: '', sort: [], filetype: ''}, page2: {Paging: '', sort: [], filetype: ''}}

您必须适合任何页面,将信息存储在localStorage中,例如:

filterData: {page1: {Paging: '', sort: [], filetype: ''}, page2: {Paging: '', sort: [], filetype: ''}}

我将使用某种状态管理(,),或者您可以在服务中存储应用的过滤器、页面。

我将使用某种状态管理(,),或者您可以在服务中存储应用的过滤器、页面。

您可以在服务中的变量中存储过滤器和排序设置

let navigationExtras: NavigationExtras = {
    queryParams: { 
        'page': currentPage,
        'sortBy': 'date',
        'filter': true
    }
};
然后将该变量与导航一起使用

// Navigate to the table component with extras
this.router.navigate(['/table'], navigationExtras);
用它们来摆桌子

constructor(private route: ActivatedRoute) {
    this.route.queryParams.subscribe(params => {
        // update the table
    });
}
优点是相同的URL将为您提供相同的表过滤器/排序状态,这在某些情况下可能很有用,缺点是您必须在添加参数时处理长URL


如果您正在寻找更复杂的解决方案,请务必查看NgRx(如@hohnzy所述)

您可以将过滤器和排序设置存储在服务的变量中

let navigationExtras: NavigationExtras = {
    queryParams: { 
        'page': currentPage,
        'sortBy': 'date',
        'filter': true
    }
};
然后将该变量与导航一起使用

// Navigate to the table component with extras
this.router.navigate(['/table'], navigationExtras);
用它们来摆桌子

constructor(private route: ActivatedRoute) {
    this.route.queryParams.subscribe(params => {
        // update the table
    });
}
优点是相同的URL将为您提供相同的表过滤器/排序状态,这在某些情况下可能很有用,缺点是您必须在添加参数时处理长URL


如果您正在寻找更复杂的解决方案,请务必查看NgRx(如@hohnzy所述)

为表和表项使用父容器组件

{
    path: 'table',
    component: ContainerComponent,
    children: [
      {
        path: '',
        component: TableComponent,
      },
      {
        path: ':id',
        component: TableItemComponent,
      }
    ]
  },

将过滤器保存在TableComponent的Ngondestory()中。重置ContainerComponent的Ngondestory()中的筛选器。将数据保留在附加服务中。

为表和表项使用父容器组件

{
    path: 'table',
    component: ContainerComponent,
    children: [
      {
        path: '',
        component: TableComponent,
      },
      {
        path: ':id',
        component: TableItemComponent,
      }
    ]
  },

将过滤器保存在TableComponent的Ngondestory()中。重置ContainerComponent的Ngondestory()中的筛选器。将数据保留在附加服务中。

过滤数据的参数有多少?分页、排序(数组)、文件类型。因此,在URL中使用这些参数,单击“上一步”时,您将获得这些参数。如果可能,共享堆栈闪电。过滤数据的参数有多少?分页、排序(数组),filetypeSo在URL中获取这些参数,单击“上一步”时,您将获得这些参数。如果可能,共享stackblitz。我只需要在从报告路径返回表时保存这些参数。从另一条路线出发时,重置如何?如何钩住它?我只需要在从报告路径返回表时保存它。从另一条路线出发时,重置如何?怎么挂?谢谢你的推荐,我会试试的。NgRx在ReactJS中有点像Redux吗?@NateRiver是的,非常感谢您的推荐,我会试试。NgRx在ReactJS中有点像Redux吗?@NateRiver是的