2016-10-11 7 views
6

मुझे एक घटक को अभिव्यक्ति पारित करने की आवश्यकता है जिसका मूल्यांकन किसी घटक के टेम्पलेट के अंदर किया जाएगा।Angular2 में इनपुट के रूप में किसी घटक को अभिव्यक्ति कैसे पास करें?

उदाहरण के लिए, घटक: घटक के टेम्पलेट के साथ

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

:

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

MyComponent का उपयोग:

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

के रूप में वहाँ एक से अधिक इनपुट हो जाएगा, मैं चाहूँगा TemplateRef के उपयोग से बचने के लिए।

1) NgFor निर्देश का ngForTemplate इनपुट संपत्ति का उपयोग करना::

+1

क्या ' '[item.id] item.name'' करने के लिए माना जाता है? यह मेरे लिए एक अभिव्यक्ति की तरह नहीं दिखता है। आप चारों ओर बाइंडिंग पास नहीं कर सकते हैं। –

+0

इसे '[अभिव्यक्ति] = "' {" id ": [item.id]," name ": item.name} '' 'के रूप में पास करें और अभिव्यक्ति.आईडी और अभिव्यक्ति.नाम –

+0

@ गुंटर ज़ोचबॉयर के रूप में इसका मूल्यांकन करना चाहिए स्ट्रिंग, आइटम = {"आईडी": 1, "नाम": "आइटम 1"} से [1] आइटम 1 –

उत्तर

16

हो सकता है कि यह कर सकते हैं विकल्पों में से एक में मदद करता है

घटक

@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>; 
} 

जनक

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

Plunker

2) NgTemplateOutlet निर्देश का उपयोग

घटक

@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>; 
} 

जनक ही रहता है:

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

Plunker

<ng-template let-item>...</ng-template> के अंदर इस तरह आप वांछित उपयोग कर सकते हैं अभिव्यक्ति

+0

में परिभाषित हो जाता है पहला वाला अब और काम नहीं कर रहा है। 'Ng-template 'में परिवर्तन के अलावा मैं यह नहीं समझ सकता कि यह मेरे लिए क्यों काम नहीं कर रहा है। यह मुझे कोई आइटम नहीं देता है, लेकिन जब मैं गलत 'let- * 'संपत्ति का उपयोग करता हूं तो त्रुटि करता है ... – TrySpace

संबंधित मुद्दे