Angular - 查明派生 class 是否实现了抽象 class (router.component)
Angular - find out if derived class implements an abstract class (router.component)
我正在尝试使用 router.component
设置页面标题。所以,我创建了一个摘要 class,它必须提供标题:
export abstract class ComponentWithTitleBase {
abstract get title(): Observable<string>;
}
然后实现它的组件如下所示:
export class AboutComponent extends ComponentWithTitleBase implements OnInit {
get title(): Observable<string> {
return of("About the demo");
}
ngOnInit(): void {}
}
现在我只需要将它用于路由器事件。我订阅并查看 router.component
是否为 ComponentWithTitleBase
,所以:
this.router.events
.pipe(
// identify navigation end
filter((event) => event instanceof NavigationEnd),
// now query the activated route
map(() => this.rootRoute(this.route)),
filter((route) => !!route.component),
tap((route: ActivatedRoute) =>
console.log(route.component instanceof ComponentWithTitleBase)
),
...
但无论我做什么,输出都是 false
。有什么方法可以让我知道某些 class 是否实现了另一个 abstract class?
instanceof
不适用于摘要 class,
将route.component instanceof ComponentWithTitleBase
替换为
ComponentWithTitleBase.isPrototypeOf(route.component)
我正在尝试使用 router.component
设置页面标题。所以,我创建了一个摘要 class,它必须提供标题:
export abstract class ComponentWithTitleBase {
abstract get title(): Observable<string>;
}
然后实现它的组件如下所示:
export class AboutComponent extends ComponentWithTitleBase implements OnInit {
get title(): Observable<string> {
return of("About the demo");
}
ngOnInit(): void {}
}
现在我只需要将它用于路由器事件。我订阅并查看 router.component
是否为 ComponentWithTitleBase
,所以:
this.router.events
.pipe(
// identify navigation end
filter((event) => event instanceof NavigationEnd),
// now query the activated route
map(() => this.rootRoute(this.route)),
filter((route) => !!route.component),
tap((route: ActivatedRoute) =>
console.log(route.component instanceof ComponentWithTitleBase)
),
...
但无论我做什么,输出都是 false
。有什么方法可以让我知道某些 class 是否实现了另一个 abstract class?
instanceof
不适用于摘要 class,
将route.component instanceof ComponentWithTitleBase
替换为
ComponentWithTitleBase.isPrototypeOf(route.component)