我正在将我的解析器(从PageMetaResolver扩展)添加到我自己的home.module中的提供程序中。但是,未调用我的方法“ resolve”。你有什么主意吗?
@Injectable({
providedIn: 'root'
})
export class HomePageMetaResolver extends PageMetaResolver implements PageDescriptionResolver {
constructor(
protected routingService: RoutingService,
protected translationService: TranslationService,
protected cms: CmsService
) {
super();
this.pageType = PageType.CONTENT_PAGE;
}
resolve(): Observable<PageMeta> {
console.log('RESOLVE')
return this.cms.getCurrentPage().pipe(
switchMap(page =>
combineLatest([
this.resolveDescription()
])
),
map(([description]) => ({ description }))
);
}
resolveDescription(): Observable<string> {
return new Observable(sub => {
sub.next('test description');
});
}
}
答案 0 :(得分:1)
请不仅为您的this.pageType
指定this.pageTemplate
,而且还要指定PageMetaResolver
。
根据元解析器的名称猜测,您只想为您的主页提供自定义元。请注意,最具体的元解析器胜出,这要归功于简单的评分算法,该算法考虑了两个因素:页面类型和页面模板(参见源https://github.com/SAP/cloud-commerce-spartacus-storefront/blob/develop/projects/core/src/cms/page/page-meta.resolver.ts#L11)。
当前,您的解析器HomePageMetaResolver
具有与通用解析器相同的特异性,因此不会调用您的resolve
方法。
您需要通过定义元解析器的属性this.pageTemplate = '<name-of-page-template-used-only-at-homepage>'
来指定更多内容。这样,您每次访问首页时,您的HomePageMetaResolver
的得分就会比默认ContentPageMetaResolver
高。
对于自定义评分算法(例如,可能将pageId
考虑在内),您可以覆盖getScore
的方法PageMetaResolver
。您甚至可以扩展方法PageMetaService.getMetaResolver
以重新定义选择正确的页面元解析器的所有规则。但是对于您来说,上述标准解决方案就足够了。