当前位置: 首页 > 知识库问答 >
问题:

Angular 4路由器在url queryParams更改时重新加载视图

沈健
2023-03-14

我有一个组件,它显示了可以使用url查询参数过滤的项目列表,这些项目从api分页,如果设置了过滤器,我需要再次调用第一个页面,这个第一次调用是在路由器的解析器中,所以我需要的是路由器以相同的方式重新加载,就像我来自其他URL一样。

app.routes.ts

const appRoutes: Routes = [
    {
        path: 'applications',
        component: AppComponent,
        resolve: {
            data: AppResolve
        }
    },
]

app.resolver.ts

@Injectable()
export class AppResolve implements Resolve<any> {
    constructor() {}
   resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> {
           // call to the api and the first 50 applications filtered by the url queryParams
    }
}

app.component.ts

@Component({
    // ...
})
export class AppComponent {
    constructor(private route: ActivatedRoute,
              private appService: AppService) {
        this.route.data.subscribe((data: any) => {
            // recive the first 50 applications
        })
    }

    loadMoreApps(): void {
        // call to the api for the next 50 applications filtered by the url queryParams
    }
}

app.service.ts

@Injectable()
export class AppService {
    constructor(private router: Router,
              private route: ActivatedRoute) {}
    navigate(urlQueryParams: any): void {
        this.router.navigate(['/applications'], {queryParams: urlQueryParams});
    }
}

其他.ts组件

@Component({
    // ...
})
export class OtherComponent {
    constructor(private appService: AppService) {}
    filterApps(): void {
        const filters = {
            'category': 'game',
            'author': 'username'
        }
        this.appService.navigate(filters)
    }
}

共有1个答案

缪成天
2023-03-14

在路由中,通过以下方式将属性RunguardSandResolver设置为“始终”:

const appRoutes: Routes = [
{
    path: 'applications',
    component: AppComponent,
    resolve: {
        data: AppResolve
    },
    runGuardsAndResolvers: 'always' // <----- This line
}

]

这将在您每次访问路线时执行解析。

问候

 类似资料:
  • 问题内容: 我在应用程序中使用了出色的模块。作为此过程的一部分,我使用命名视图来管理应用程序中的“动态子导航”。 考虑以下: 用户首次访问该应用程序时,系统会向他们显示人员列表。当他们单击某个人时,他们将被带到详细信息页面。很基本的东西。如果有帮助,这是标记… 但是,调用REST服务以获取人员列表,因此在查看人员时,用户可以导航同级元素。使用上述方法会导致模板和控制器重新呈现,因此每次单击后都会产

  • 我知道这不是react router的默认行为/功能,可以帮助我们轻松地重新加载当前组件,但我真的需要在我的应用程序中使用它。 我的应用程序处理产品。我有一个可以加载的产品列表,当我单击某个项目时,它会显示相关的产品详细信息。 在该页面上,我有加载相同组件的相关产品链接,但有另一个产品详细信息,位于 我在我的组件willmount中获取数据,似乎如果我只更改URL,就不会装载新组件,因此,我总是显

  • 有没有可能--在中也这样做? 我为什么需要这个?让我用一个例子来解释: 创建新类别的路由是,在保存时显示,并且要将路由(23-是新项的id存储在数据库中)

  • 问题内容: 当前,我们的项目正在使用default ,而我正在使用此“ hack”来进行更改,而无需重新加载页面: 和在 我想到的替换用筑巢路线,但无法找到这。 有可能吗? 我为什么需要这个?让我用一个例子来解释: 创建新类别的路线是在SAVE 之后显示的,我想将路线更改为(23-是存储在db中的新项目的id) 问题答案: 只需使用即可代替 。内部调用,但会自动将选项设置为。您可以呼叫和设置。例如

  • 我正在使用camel 3.1.0和spring boot 2.2.6。我有externalise配置,spring cloud bus用于从Git读取配置数据。 我需要添加什么属性来让Spring Boot以刷新Spring cloud bus事件上的camel上下文吗?

  • 我在这个拉请求中看到: > 重新加载当前路径并再次调用数据钩子 但是当我尝试从Vue组件发出以下命令时: 我得到这个错误: 我搜索了文档,但没有找到任何相关的内容。vue/vue路由器是否提供类似的功能? 我感兴趣的软件版本有: 另外,我知道是备选方案之一,但我正在寻找本机Vue选项。