template example directives angular angular2-directives

example - svg circulo para angular2



directives angular 2 (1)

Para enlazar a los atributos del elemento SVG En angular 2, debe prefijarlos con attr :

Para tu círculo esto será:

<svg height="100" width="100"> <circle fill="white" [attr.cx]="parsedSize/2" [attr.cy]="parsedSize/2" [attr.r]="radius" [attr.stroke]="stroke" [attr.stroke-width]="strokeWidthCapped" [attr.stroke-dasharray]="circumference" [attr.stroke-dashoffset]="(1 - parsedComplete) * circumference"/> </svg>

No estoy completamente seguro de si debería ser [attr.stroke-width] o [attr.strokeWidth] , pero dale una oportunidad

Necesito hacer un arco de progreso basado en el porcentaje calculado. He creado una directiva personalizada para acceder a los atributos svg del usuario. Al actualizar eso en mi plantilla, aparece el siguiente error:

"Can''t bind to ''cx'' since it isn''t a known native property ", "Can''t bind to ''cy'' since it isn''t a known native property " etc.

Estoy recibiendo el error anterior para todos los atributos svg.

A continuación se muestra mi código en jade:

progress-arc([size]="200", [strokeWidth]="20", [stroke]="red", [complete]="0.8")

A continuación se muestra mi código de directiva:

import {Component,Input,AfterViewInit} from ''@angular/core''; @Component({ selector:''progress-arc'', template:` <svg height="100" width="100"> <circle fill="white" cx="{{parsedSize/2}}" cy="{{parsedSize/2}}" r="{{radius}}" stroke="{{stroke}}" stroke-width="{{strokeWidthCapped}}" stroke-dasharray="{{circumference}}" stroke-dashoffset="{{(1 - parsedComplete) * circumference}}"/> </svg>`, providers: [], directives: [] }) export class ProgressArc implements AfterViewInit { @Input(''size'') size:string; @Input(''strokeWidth'') strokeWidth:string; @Input(''stroke'') stroke:string; @Input(''complete'') complete:string; parsedStrokeWidth:number; parsedSize:number; parsedComplete:number; strokeWidthCapped:number; radius:number; circumference:number; ngAfterViewInit() { console.log(''ffffffffffff'',parseFloat(this.strokeWidth)); alert(''gggggggggg''); this.parsedSize = parseFloat(this.size); this.parsedStrokeWidth = parseFloat(this.strokeWidth); this.parsedComplete = parseFloat(this.complete); this.strokeWidthCapped = Math.min(this.parsedStrokeWidth, this.parsedSize / 2 - 1); this.radius = Math.max((this.parsedSize - this.strokeWidthCapped) / 2 - 1, 0); this.circumference = 2 * Math.PI * this.radius; console.log(''ggggggggggggggggg'',this.strokeWidthCapped,this.radius,this.circumference); } }

¿Puede alguien decirme a dónde me voy mal?