angular - Ionic Angular2 egen komponent
Min komponent html:
<div>
{{text}}
{{percentLeft}}
{{innerColor}}
</div>
Min Komponents TS-fil
import { Component,Input } from '@angular/core';
/**
* Generated class for the TimeLeftBarComponent component.
*
* See https://angular.io/docs/ts/latest/api/core/index/ComponentMetadata-class.html
* for more info on Angular Components.
*/
@Component({
selector: 'time-left-bar',
templateUrl: 'time-left-bar.html'
})
export class TimeLeftBarComponent {
@Input('text') text: string;
@Input('percentLeft') percentLeft: number;
@Input('innerColor') innerColor: string;
constructor() {}
}
Hur jag kallar denna komponent:
<time-left-bar [percentLeft]="50" [text]="text" [innerColor]="black">
</time-left-bar>
Det visar bara den första parametern jag anger,
till exempel:
<time-left-bar [percentLeft]="50" [text]="text" [innerColor]="black">
</time-left-bar>
Ger bara 50
<time-left-bar [text]="text" [innerColor]="black" [percentLeft]="50">
</time-left-bar>
Returnerar endast text
<time-left-bar [innerColor]="black" [percentLeft]="50" [text]="text">
</time-left-bar>
Returnerar endast black
Vad gör jag för fel?
Svar #1
Om du lägger till [] så utvärderar Angular värdet som ett uttryck. När det inte finns någon egenskap med det namnet på din komponents klass eller om den inte har något värde kommer det att resultera i undefined eller null.
Så om du bara vill skicka ett strängvärde för text och innerColor, använd enkla citattecken:
<time-left-bar ... [text]="'text'" [innerColor]="'black'"></time-left-bar>
Ett bättre tillvägagångssätt skulle vara att skapa egenskaper för dessa värden istället och använda det namnet (utan enkla citattecken):
public aNumber = 50;
public aText = 'some text';
public aColor = 'black';
Och i vyn:
<time-left-bar [text]="aText" [innerColor]="aColor" [percentLeft]="aNumber">
</time-left-bar>
