美文网首页SAP
SAP Spartacus PageMetaService 的单

SAP Spartacus PageMetaService 的单

作者: _扫地僧_ | 来源:发表于2021-09-19 09:38 被阅读0次

    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的原创文章,尽在:"汪子熙":


    相关文章

      网友评论

        本文标题:SAP Spartacus PageMetaService 的单

        本文链接:https://www.haomeiwen.com/subject/jfydvltx.html