test.js:
const FILE = ['./cms/facade/page-meta.service.spec.ts'];
context.keys().filter( name => !!FILE.includes(name)).map(context);
PageMetaService的作用是,解析到底有哪些 PageResolver 需要执行,并调度这些 PageResolver,执行对应方法。
这些 Page Resolver 的单元测试,位于文件 page-meta.service.spec.ts 内:
Page resolver 的实现,位于 page 文件夹内:
const PageMetaResolvers: PageMetaConfig = {
pageMeta: {
resolvers: [
{
property: 'title',
method: 'resolveTitle',
},
{
property: 'heading',
method: 'resolveHeading',
},
{
property: 'description',
method: 'resolveDescription',
disabledInCsr: true,
},
{
property: 'image',
method: 'resolveImage',
disabledInCsr: true,
},
{
property: 'breadcrumbs',
method: 'resolveBreadcrumbs',
},
{
property: 'robots',
method: 'resolveRobots',
disabledInCsr: true,
},
],
enableInDevMode: true,
},
};
PageMetaResolver 是一个 abstract class:
PageWithAllResolvers:实现了很多接口的类
可以使用 disabledInCsr 禁掉某个 resolver:
如果在开发模式下,不应该执行被禁用的 resolver:
service 就是 PageMetaService,执行 getMeta 并且 subscribe 之后,会触发 page resolver 的执行。
先要执行该 Service 类的 CMS service,调用 getCurrentPage 拿到当前 CMS 页面类型,再根据页面类型拿到负责的 Meta Resolver,最后调用 Resolver 进行解析。
这就是 determine 出来的解析器:
看注释:在 SSR 模式下,总是执行:
要执行这三个方法:
更多Jerry的原创文章,尽在:"汪子熙":
网友评论