2

我正在尝试在 kentico 云中的 RichTextField 内渲染结构。按照本教程https://docs.kenticocloud.com/tutorials/develop-apps/get-content/dealing-with-structure-in-rich-text我制作了一个 ContentType 并用作我的模板AngularLink(它有 2 个属性,文本和链接),然后定义一个 TypeResolver 并在 DeliveryClient 中注册

new DeliveryClient({
      projectId: 'xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx',

      typeResolvers: [
        new TypeResolver('landing_page', () => new LandingPage()),
        new TypeResolver('angular_link', () => new AngularLink())
      ],
    });

该类AngularLink提供了一个richTextResolver

export class AngularLink extends ContentItem {
  text: Fields.TextField;
  link: Fields.TextField;
  constructor() {
    super({

      richTextResolver: (item: AngularLink) => {
        return `<a routerLink="${item.link.value}">${item.text.value}</a>`;
      }
    });
  }
}

问题是,当我使用getHtml()RichTextField 中的方法解析 html 时,通过innerHTMLBrowserRichTextParser将返回的字符串插入到元素中,最终结果是带有全小写属性的锚标记。routerlink

是否有更好的策略来使角度属性在 kentico-cloud-delivery api 的标准流程中工作?

非常感谢您!

4

1 回答 1

0

这是一个很好的问题,但解决起来并不容易。从本质上讲,您面临的问题是您从getHtml方法中得到的只是“a” string,当您通过innerHtmlAngular 渲染它时将其视为 html,但它无法解析 html 中的指令/组件。

将来 Angular 的指令可能innerHtml尝试实例化和解析指令/组件,但目前情况并非如此。考虑到组件、生命周期和 DI 的复杂性,我认为这不会在不久的将来实现。新的Ivy渲染器可能会在某个时候为此提供路径。

要实现您的要求,您需要指示 Angular 动态创建组件/指令 - Angular 对此提供支持。

一些可能对您有用的资源是:

于 2019-07-31T09:57:42.520 回答