我是一家咖啡店的志愿者。我已经构建了一个应用程序,可以向咖啡师展示饮料配方。这是一个快速快照:
数据来自 firebase 实时数据库。这是该数据库的一个片段:
我想要做的是将一些 HTML 放入说明中以格式化它以便于阅读。我通过将模板文件中的内容绑定到 [innerHTML] 来做到这一点,如下所示:
<ion-item>
<ion-grid>
<ion-row *ngIf="!item.temperature">
<ion-col>
<ion-label><strong>Instructions</strong></ion-label>
</ion-col>
</ion-row>
<ion-row>
<ion-col>
<h5 *ngIf="this.compactMode">
<span [innerHTML]="item.instructions"></span>
</h5>
<span *ngIf="!this.compactMode" [innerHTML]="item.instructions">
</span>
</ion-col>
<ion-col *ngIf="item.image"
><ion-img
(click)="onClickImage(item.image)"
src="{{item.image}}"
></ion-img
></ion-col>
</ion-row>
</ion-grid>
</ion-item>
问题
这对<b> <ol> <ul> <li> <br>
等等非常有效。但它不适用于<ion-checkbox>
输入<input type="checkbox">
标签在呈现之前在某处被过滤掉。
安全 我知道将 HTML 放入数据库可以增加我的安全面,所以我使用sanitizer过滤 HTML,然后尝试在事后添加。这是我的做法:
stringFormat(inputString: string) {
const re1 = /\[\]/gi;
let returnString = this.sanitizer.sanitize(1, inputString);
returnString = returnString.replace(re1, '<ion-checkbox id=\'input\'></ion-checkbox>');
return returnString;
}
你会注意到我首先清理了字符串,然后我做了一个替换,替换[]
为复选框。
(如果您有兴趣,我只是在制作一个打开/关闭清单,如果人们在完成任务后可以触摸复选框会很好......我不打算存储复选框值,我只想要复选框的用户体验。)
我已经检查过 item.instructions 实际上在 item 对象中包含了替换的字符串,但是当由 ionic/angular 呈现时,实际文本似乎过滤掉了除普通 HTML 标签之外的任何内容。
最后的问题 那么问题来了:对于使用 [innerHTML] 绑定可以插入到 DOM 中的内容是否存在某种限制?这是我想太多了吗?
谢谢。