2016-10-11 30 views
6

Bir bileşenin şablonunda değerlendirilecek bir bileşene bir ifade iletmem gerekiyor. ÖrneğinAngular2'de bir bileşen olarak bir ifadeye bir giriş nasıl iletilir?

, bileşen:

@Component({ 
    selector: 'app-my-component', 
    ... 
}) 
export class MyComponent { 
    @Input items: MyClass; 
    @Input expression: String; 
    ... 
} 

bileşenin şablonla: MyComponent ait

<div *ngFor="let item of items"> 
    {{expression}} 
</div> 

Kullanımı:

<app-my-component [items]="listOfItems" [expression]="'[item.id] item.name'"> 
</app-my-component> 

birden fazla girdi olacak gibi ben istiyorum TemplateRef kullanımını önlemek için. NgFor direktifin ngForTemplate giriş özelliğini kullanarak

1):

+1

istenen kullanabilirsiniz <ng-template let-item>...</ng-template> içinde bu şekilde? Bu bana bir ifade gibi görünmüyor. Bağları geçemezsin. –

+0

bunu [[expression] = "'{" id ": [item.id]," name ": item.name}'" olarak iletin ve expression.id ve expression.name olarak kullanın. –

+0

@ GünterZöchbauer string, item = {"id": 1, "name": "Item1"} -> [1] Item1 –

cevap

16

Belki bu seçeneklerden can biri size yardımcı olur

Bileşen

@Component({ 
    selector: 'app-my-component', 
    template: ` 
    <div *ngFor="let item of items template: itemTemplate"></div>` 
}) 
export class MyComponent { 
    @Input() items: any; 
    @ContentChild(TemplateRef) itemTemplate: TemplateRef<any>; 
} 

Veli

direktifini kullanarak

Plunker

2)

Bileşen

@Component({ 
    selector: 'app-my-component', 
    template: ` 
    <div *ngFor="let item of items"> 
    <ng-template [ngTemplateOutlet]="itemTemplate" [ngTemplateOutletContext]="{ $implicit: item }"></ng-template> 
    </div>` 
}) 
export class MyComponent { 
    @Input() items: any; 
    @ContentChild(TemplateRef) itemTemplate: TemplateRef<any>; 
} 

Veli aynı kalır:

<app-my-component [items]="listOfItems"> 
    <ng-template let-item>[{{item.id}}] {{item.name}}</ng-template> 
</app-my-component> 

Plunker

Eğer ` '[item.id] item.name'` yapmak gerekiyordu ne ifade

+0

İlki artık işe yaramıyor. 'Ng-template'de değişiklikten başka neden onun benim için çalışmadığını anlayamıyorum. Bana hiçbir şey vermiyor, yanlış 'let- *' özelliğini kullandığımda hata yapıyor ... – TrySpace

İlgili konular