2016-05-24 37 views
6

Ho un componente che ha una proprietà count e color. Il componente dovrebbe visualizzare il numero di <div> s con uno stile in linea utilizzato per cambiare il colore in color.Componenti Angular2 - Stili lineari dinamici

Ecco quello che ho finora:

@Component({ 
    selector: 'my-control', 
    template: `<div *ngFor="let i of dummyArray" style="color: {{color}}"> COLOR = {{color}}</div>` 
}) 
export class MyControl { 
    private _count: number; 
    @Input() set count(value: string) { 
     this._count = +value; 
    } 
    @Input() set color(value: string) { 
     this._color = value; 
    } 
    get dummyArray(): number[] { 
     let ret: number = []; 
     for (let i = 0; i < this._count; ++i) ret.push(i); 
     return ret; 
    } 
    get color(): string { 
     return this._color; 
    } 
} 

Ciò rende:

<my-control count="5" color="red"> 
    <div>COLOR = red</div> 
    <div>COLOR = red</div> 
    <div>COLOR = red</div> 
    <div>COLOR = red</div> 
    <div>COLOR = red</div> 
</my-control> 

Ora ho due problemi con questo:

  1. C'è un modo migliore per rendere il <div> s count s senza creare un array fittizio?

  2. Ancora più importante, gli stili in linea non vengono impostati. Se ho stili hardcode come style="color: red", funziona. Ma lo style="color: {{color}}" no. L'elemento è reso senza stili come puoi vedere sopra.

Per 2 #, ho anche provato ad utilizzare i bambini 's la nativeElement così:

@Input() set count(value: string) { 
    this._count = +value; 
    this.update(); 
} 
@Input() set color(value: string) { 
    this._color = value; 
    this.update(); 
} 
update(): void { 
    for (let i = 0; i < this._count; ++i) { 
     this.renderer.setElementStyle(this.elRef.nativeElement.children[i], 'color', this._color); 
    } 
} 

Ma io ottenere un'eccezione accesso gli elementi figlio in quanto non esistono a quanto pare.

Come devo risolvere questi problemi?

+0

Non c'è modo per noi 'ngFor' senza un array. È possibile creare la direttiva personalizzata 'ngFor' che lo fa. C'è un problema per supportare 'ngFor' con un numero invece di un array ma è improbabile che venga implementato. –

+0

grazie per l'amico di punta .. questo fa schifo però .. rende un'implementazione goffo di componenti in questi casi .. – AweSIM

+1

Il tuo codice può essere ottimizzato un po '. Vedi http://stackoverflow.com/questions/36535629/repeat-html-element-multiple-times-using-ngfor-based-on-a-number –

risposta

15
<div *ngFor="let i of dummyArray" style="color: {{color}}> 

manca la chiusura " dopo color}}

Binding questo modo di stile dovrebbe essere evitato perché non funziona in tutte le versioni di Safari (forse anche altri).

Invece utilizzare

<div *ngFor="let i of dummyArray" [ngStyle]="{'color': color}"> 
+1

scuse .. ho perso il finale '" 'accidentalmente qui .. il problema rimane ancora .. fammi controllare il' [ngStyle] = "{'colore ': color} "' thingy e riporta indietro .. – AweSIM

+1

WORKS! =) THANKS =) – AweSIM

+2

questo è il più veloce che abbia mai ottenuto una risposta ..contando i minuti per essere in grado di contrassegnare questo come la risposta corretta .. =) – AweSIM

3

Chi tua prima domanda:

per creare un array con dieci undefined elementi, si potrebbe fare:

@Component({ 
    selector: 'my-app', 
    template: `<div *ngFor="let i of arr(10); let index=index">hello {{index}}</div>` 
}) 
export class AppComponent { 
    arr=Array; 
} 

check this plunk

+0

grazie per il suggerimento .. purtroppo posso accettare solo una risposta come corretta risposta .. E Gunter's è più corretto in quanto risponde al problema più urgente .. = ( – AweSIM

+1

Siete i benvenuti @AweSIM.Io completamente d'accordo La risposta di Gunter è quella corretta.Inoltre, la velocità esplosiva della sua risposta deve essere contata :) . È solo che ho aggiunto alla sua risposta e l'ho pubblicato. E ora vedo che ha già commentato la tua domanda in relazione al problema che ho risposto: D – Abdulrahman