【问题标题】:How to dynamically load html code in an angular web app?如何在 Angular Web 应用程序中动态加载 html 代码?
【发布时间】:2021-04-16 22:48:08
【问题描述】:

我正在构建一个关于一本书的 Angular 网站。

在一个章节中,您可以选择一个章节并获取该章节的摘录(摘录为html格式)。

我想知道如何存储这些摘录。我认为为每一章创建一个组件是个坏主意。我考虑将 html 存储在字符串变量中,但我不能这样做,因为摘录的 html 代码包含很多引号 ("),这使得无法设置字符串变量。然后我考虑创建许多 html 文件并在同一个组件中加载正确的,但我不知道如何在组件中动态加载 html 文件。

如果您有任何合适的解决方案的想法,请告诉我!

【问题讨论】:

    标签: html angular web


    【解决方案1】:

    为每一章创建 HTML 文件并在选择时加载它们确实是个坏主意。正如您所提到的,您不想创建组件,您可以尝试 Angular 的 ngTemplateOutlet。如果所有章节都有相同的通用显示模板,那么只需在您正在工作的组件中定义一个模板,并通过传递适当的章节详细信息来显示正确的模板,您的工作就差不多结束了。这是一个很好的read

    ng-template 的使用示例

    <ng-template #sampleTemplate let-item>
          <p>I am chapter {{ item.name }}</p>
    </ng-template>
    

    下面是您的章节所在的位置,假设它是一个列表。您将它的对象(包含有关该章节的详细信息)传递给上面的模板。

    <div *ngFor="let chapter of chapters">
          <ng-container [ngTemplateOutlet]="sampleTemplate" [ngTemplateOutletContext]="{ $implicit: chapter }">
            </ng-container>
     </div>
    

    如果您希望一次显示第一章(比如点击时),您甚至不必转到模板概念,但只需将章节对象存储在变量中点击时会有所帮助。这是一个例子:

    <div *ngFor="let chapter of chapters; let i=index">
          <button type="button" (click)="selectedChapter=chapter">Open Chapter{{i+1}}</button><br><br>
     </div>
    
    <div>
      <p>I am {{ selectedChapter.name }}</p>
    </div>
    

    只需在打字稿文件中定义变量selectedChapter即可。

    selectedChapter: any = this.chapters[0]; // chapters is the array of objects containing chapter details
    

    【讨论】:

    • 我认为这不是我真正想做的事情。我有一个包含所有章节链接的网页。如果您单击章节的链接,它将打开一个包含该章节摘录的页面。摘录是html格式的文本。所以这些章节除了都是文本之外没有任何共同点。另外我想知道如何存储摘录,因为它们将包含很多引号,因此由于引号,我无法将它们分配给字符串变量。所以我看不出如何以列表的形式列出这些章节。如果有什么我不理解的地方请告诉我...
    • 我的几分钱在这里。点击打开新页面在 Angular 中不是一个好主意。我已经发布了答案,因为您希望显示同一组件的详细信息。顺便问一下,您目前如何获得摘录?如果它是一个 Json 响应,您可以轻松地使用 innerHTML 和 JSON.parse(JSON.stringify(response_object)) 来实现这一点。
    • 摘录在html代码中...带有很多html标签。另外,还有很多引号(“)。我真的不知道如何存储摘录。您有想法吗?请告诉我是否有!:) 摘录中有很多引号。我我想我应该转义引号,但这会很长,因为摘录大约有 500 个字长。所以我还不知道如何获取摘录;这取决于它们将如何存储。
    • 嗨@andremarquis,您不必担心引号,因为如果响应是JSON,您会自动转义这些引号。您从数据库中获得的任何内容都将以字符串形式出现。因此,只需通过 console.log 或其他方式检查数据库响应,您将看到这些引号被自动转义:)
    猜你喜欢
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 2018-05-11
    • 1970-01-01
    • 2017-10-11
    • 2014-07-05
    相关资源
    最近更新 更多