ฉันต้องการตั้งค่าภาพพื้นหลังของ DIV ในเทมเพลตคอมโพเนนต์ในแอพ Angular 2 ของฉัน อย่างไรก็ตามฉันได้รับคำเตือนต่อไปนี้ในคอนโซลของฉันและฉันไม่ได้รับเอฟเฟกต์ที่ต้องการ ... ฉันไม่แน่ใจว่ารูปภาพพื้นหลัง CSS แบบไดนามิกถูกบล็อกเนื่องจากข้อ จำกัด ด้านความปลอดภัยใน Angular2 หรือหากเทมเพลต HTML ของฉันเสีย
นี่คือคำเตือนที่ฉันเห็นในคอนโซลของฉัน (ฉันเปลี่ยน img url เป็น/img/path/is/correct.png
:
คำเตือน: การล้าง URL ค่ารูปแบบที่ไม่ปลอดภัย (SafeValue ต้องใช้ [คุณสมบัติ] = การผูก: /img/path/is/correct.png (ดูhttp://g.co/ng/security#xss )) (ดูที่http: // g.co/ng/security#xss )
สิ่งนี้คือฉันทำความสะอาดสิ่งที่ฉีดเข้าไปในเทมเพลตของฉันโดยใช้DomSanitizationService
ใน Angular2 นี่คือ HTML ของฉันที่ฉันมีในเทมเพลตของฉัน:
<div>
<div>
<div class="header"
*ngIf="image"
[style.background-image]="'url(' + image + ')'">
</div>
<div class="zone">
<div>
<div>
<h1 [innerHTML]="header"></h1>
</div>
<div class="zone__content">
<p
*ngFor="let contentSegment of content"
[innerHTML]="contentSegment"></p>
</div>
</div>
</div>
</div>
</div>
นี่คือส่วนประกอบ ...
Import {
DomSanitizationService,
SafeHtml,
SafeUrl,
SafeStyle
} from '@angular/platform-browser';
@Component({
selector: 'example',
templateUrl: 'src/content/example.component.html'
})
export class CardComponent implements OnChanges {
public header:SafeHtml;
public content:SafeHtml[];
public image:SafeStyle;
public isActive:boolean;
public isExtended:boolean;
constructor(private sanitization:DomSanitizationService) {
}
ngOnChanges():void {
map(this.element, this);
function map(element:Card, instance:CardComponent):void {
if (element) {
instance.header = instance.sanitization.bypassSecurityTrustHtml(element.header);
instance.content = _.map(instance.element.content, (input:string):SafeHtml => {
return instance.sanitization.bypassSecurityTrustHtml(input);
});
if (element.image) {
/* Here is the problem... I have also used bypassSecurityTrustUrl */
instance.image = instance.sanitization.bypassSecurityTrustStyle(element.image);
} else {
instance.image = null;
}
}
}
}
}
โปรดทราบว่าเมื่อฉันผูกกับเทมเพลตโดยใช้ [src] = "image" ตัวอย่างเช่น:
<div *ngIf="image">
<img [src]="image">
</div>
และimage
ผ่านไปโดยใช้bypassSecurityTrustUrl
ทุกอย่างดูเหมือนจะทำงานได้ดี ... มีใครเห็นไหมว่าฉันทำอะไรผิด?