使用Angular 8从JSON渲染HTML

问题描述 投票:0回答:3

我有一台装有组件的Angular Storybook。

我在组件的stories.ts中有一些JSON,其中一个属性是DIV的内容,就像这样...

{
    "accordionLink": 'Accordion link 1',
    "accordionContent": "<p>Hello World!</p>",
}

模板HTML看起来像这样...

<li *ngFor="let accordionItem of accordionData; let i = index;">
    <a href="javascript:;" class="accordion-trigger" (click)="toggleAccordian($event, i)">
        {{ accordionItem.accordionLink }}
    </a>
    <div hide="!isActive">
        <div class="inner row">
            <div [innerHtml]="accordionItem.accordionContent"></div>
        </div>
    </div>
</li>

我尝试获取“ accordionContent” HTML以便在插值所在的实际DIV中进行渲染,但是我只能显示实际的字符串(

Hello World!

),而不是包含所有内容的段落适用的样式...

由于DIV的内容需要灵活(段落,列表等),因此,如果可能的话,我希望能够将HTML放入容器中。

任何帮助将不胜感激。谢谢!

编辑:

在stories.ts文件中,我这样设置了数据...

const mockData = [
  {
    "accordionLink": 'Accordion link 1',
    "accordionContent": '<p>1 - Lorem ipsum dolor.</p>',
  },
  {
    "accordionLink": 'Accordion link 2',
    "accordionContent": '<p>2 - Lorem ipsum dolor.</p>',
  },
  {
    "accordionLink": 'Accordion link 3',
    "accordionContent": '<p>3 - Lorem ipsum dolor.</p>',
  },
];

在同一个文件中,我将故事设置为显示在Storybook中,就像这样...

template: `<ui-accordion [accordionData]="accordionData"></ui-accordion>`,
props: {
    accordionData: object('Content', mockData, 'General'),
}

在组件的.ts文件中,我将内容设置为输入...

@Input() accordionData: any;
html json angular interpolation storybook
3个回答
0
投票

尝试使用innerHTML代替innerHtml

 <div [innerHTML]="accordionItem.accordionContent"></div>

0
投票

在获取json数据时需要改进。我做了同样的事情,并且正在工作:

 jsonData = [
    {
      accordionLink: "Accordion link 1",
      accordionContent: "<p>Hello World!</p>"
    }
  ];
  accordionData: any;

  constructor() {
    this.accordionData = this.jsonData;
  }

示例:https://codesandbox.io/s/cold-flower-9ktdk?fontsize=14&hidenavigation=1&theme=dark

谢谢。


0
投票

您可以通过ngx-markdown来实现

并将您的json HTML绑定到[data]

<li *ngFor="let accordionItem of accordionData; let i = index;">
    <a href="javascript:;" class="accordion-trigger" (click)="toggleAccordian($event, i)">
        {{ accordionItem.accordionLink }}
    </a>
    <div hide="!isActive">
        <div class="inner row">
            <markdown [data]="accordionItem.accordionContent"></markdown>   
        </div>
    </div>
</li>
© www.soinside.com 2019 - 2024. All rights reserved.