1

我想知道是否可以以任何可能的方式在 Angular Route中使用 (Typescript) 泛型。

最好的方法是如果我可以对组件本身使用泛型:

// the route:
{
  path: 'user-a',
  component: UserComponent<UserA> // other routes will use UserB and UserC
}

// the component:
@Component({...})
export class UserComponent<T> { ... }

这显然给出了一个错误,但它很好地说明了我想要完成的事情。

另一种方法是将泛型与Resolver一起使用:

// the route:
{
    path: '/user-b',
    component: UserComponent, 
    resolve: { user: UserResolver<UserB> }
}

// the resolver:
export class UserResolver<T> implements Resolve<boolean> {}

这个答案使用了这种方法,但对我来说它给出了一个错误UserResolver<UserB>“'typeof UserResolver'类型的值不可调用。你的意思是包括'new'吗?”

4

1 回答 1

0

不知道我怎么会错过这个,但是角度路线上的数据属性的值可以是any类型。这意味着您可以这样做:

// the route in app-routing.module.ts
{
  path: 'user-a',
  component: UserComponent,
  data: {
    componentType: UserA
  }
}

// UserComponent:
@Component({...})
export class UserComponent implements OnInit {

  constructor(private route: ActivatedRoute) {}

  ngOnInit(): void {
    const componentType: any = this.route.snapshot.data['componentType'];
  }

}

不知何故,我总是假设数据属性的值只能是一个字符串,但文档清除 state any

于 2020-12-24T00:59:36.660 回答