2016-06-29 9 views
4

Angular 2 rc3Angular 2, Hinzufügen von calc() als Inline-Stil. Unsichere Interpolation mit Klammern

Ich versuche, dynamisch calc() in einer Vorlage zu einem Element hinzuzufügen. Ich habe so etwas.

template : `<div attr.style.width="{{width}}></div>"` 

export myClass 
{ 
    @Input() myInputObject:any; 
    private width:string; 


    ngOnInit() { this.setWidth()} 

    private setWidth() 
    { 
     let percent = myInputObject.percent; 
     this.width = 'calc(' + percent + '% - 20px)'; 
    } 
} 

Wenn ich die Klammer verwenden, sieht die Ausgabe im DOM wie folgt aus.

<div style="unsafe"></div>

Wenn ich die Klammer es (Art) arbeitet herausnehmen Es sieht wie folgt aus.

<div style="calc10% - 20px"></div>

Das funktioniert auch nicht.

<div attr.style.width="calc({{width}} - 20px)"> 

Jede Hilfe, wie calc() der Vorlage hinzuzufügen ist sehr geschätzt. Hinweis Ich habe auch versucht, die Klammern durch &#40; und &#41; zu ersetzen. Das kam auch als "unsicher" zurück.

Beispiel: (rc1)

Ich verwende rc3 in meiner Umgebung. Aber ich konnte das gleiche Problem mit RC1 in Plunker reproduzieren. Ich gehe davon aus, dass dies eine Sicherheitsfrage ist. Aber es muss einen Weg geben, calc() zu einem Style-Attribut hinzuzufügen. Vielleicht gibt es einen besseren Weg als das?

https://plnkr.co/edit/hmx5dL72teOyBWCOL0Jm?p=preview

Antwort

10

Berechnete Arten hygienisiert werden sollte. Hier

ist die Lösung für Sie:

import {DomSanitizationService} from '@angular/platform-browser'; 

@Component({ 
    selector: 'my-app' 
    template: ` 
    <div [style.width]="width"> 
     <h2>Hello {{name}}</h2> 
    </div> 
    ` 
}) 
export class App { 

    private width:string; 

    constructor(sanitizer: DomSanitizationService) { 
    this.name = 'World' 
    this.width = sanitizer.bypassSecurityTrustStyle("calc(10% - 20px)"); 
    } 
} 
+0

Vielen Dank für die Antwort. Ich werde das irgendwann heute ausprobieren und zu dir zurückkommen. –

+0

Das funktioniert. Vielen Dank. –

+3

Beachten Sie, dass ich in RC6 DomSanitizer anstelle von DomSanitizationService verwenden musste. https://angular.io/docs/ts/latest/api/platform-browser/index/DomSanitizer-class.html –