Angular 4:在innerHTML中设置img src base href

Posted

技术标签:

【中文标题】Angular 4:在innerHTML中设置img src base href【英文标题】:Angular 4: Setting img src base href inside of innerHTML 【发布时间】:2017-10-29 21:35:24 【问题描述】:

在我的 Angular 4 应用程序中,我使用 innerhtml 来显示 HTML 格式的练习描述。

<li *ngFor="let exercise of exercises">
  <div [innerHTML]="exercise.longDescription"></div>
</li>

这些描述也可以包含图片

<img src="/file/na\6ad7k4ynon6yh2qcibcdqxwcey.jpg">

这就是我苦苦挣扎的地方,因为我需要将这些图像的基本 href 设置为后端所在的 localhost:8080。 Angular 正在尝试从标准 localhost:4200 (ng serve) 获取它们,所以我得到了errors。

知道怎么做吗?

【问题讨论】:

Angular is trying to get them from standard localhost:4200 你能详细说明这一点吗?还有什么错误? 您是否已将文件配置为 angular-cli.json 中的资产?如果没有,您的文件将不会被复制到 dist 文件夹并且将无法用于网络服务器 @AakashThakur localhost:4200 是您可以访问 Angular 4 应用程序进行开发的地方(如果 --port 未另行指定)。 您能出示您的服务电话吗? @MarkusKollers 我不想保存任何东西。我使用 http.get 从服务器获取锻炼,其中包含 HTML 格式的 shortDescription。但是此 HTML 描述中的图像 src 是相对路径 - 指向也存储在服务器上的图像。但是,我想为它设置不同的基础。 【参考方案1】:

找到了一个解决方案,不确定是否是最干净的,但它可以完成工作。

我在我的练习模型中创建了一个函数,将 environment.URL 添加到 src(对于开发来说是 localhost:8080,对于生产来说是服务器的 API)。

public getHTML () 
    return this.longDescription.replace(/<img src="([^"]+)">/, '<img src="'+environment.URL+'$1">');
  

我这样访问它

<div [innerHTML]="exercise.getHTML()"></div>

改为。

环境常量如下所示:

export const environment = 
  production: false,
  URL: 'http://localhost:8080'
;

【讨论】:

以上是关于Angular 4:在innerHTML中设置img src base href的主要内容,如果未能解决你的问题,请参考以下文章

Angular2 innerHtml 删除样式

Angular 4 无法在标题中设置 CSRF-TOKEN

如何在 Angular 4 的 contenteditable div 中设置插入符号位置?

在javascript中设置innerHTML并从C#中获取

无法在 Firefox 中设置 IFrame 的 document.body.innerHTML

如何在IONIC 4中设置rootPage