在 Angular 9 中,有没有办法将 "strategy" 注入到路由组件中?

In Angular 9, is there a way to inject "strategy" into route component?

假设我有一个代表页面的通用 UI 组件。我想将此组件用于多个路由,并且行为会根据加载它的路由而有所不同。 因此,我需要根据路线向该组件中注入“策略”。

有办法吗?或者这不是一个好方法?

作为参考,该组件是一个列表页面,它在 table 中列出现有记录,并具有基本功能,例如:编辑、查看、搜索等。 到目前为止,我已经创建了多个非常相似的组件并在路由中使用它们(每个记录类型一个)。但这有很大的开销,例如确保它们看起来相同,确保它们具有相同的功能。

如果不知道你的“不同策略”涉及什么(最好是最小的 stackblitz 重现),很难给你确切的建议,但我想你可以使用 resolver.

基本上,您定义一个解析器,它将为指定的路由提供一些东西。解析器可以访问当前路由快照和状态快照,因此您可以访问参数、查询参数等来解析您的数据。它也可以异步工作。

您可能会使用服务(例如用户的 UserService、产品的 ProductsService 等 - 只要它们共享相同的接口)来提供组件中的逻辑。

它也可能提供其他东西 - 例如记录、列列表等

您还可以为不同的路由提供不同的解析器,任何适合您的都行。

然后您可以使用这些方法访问组件中已解析的数据:

constructor(private activatedRoute: ActivatedRoute) {}

ngOnInit(): void {
  this.data = this.route.snapshot.data;
}