9

Şablonu aktardığım bir bileşenim var. Bu bileşenin içinde içeriği görüntüleyebilmek için içeriği geçmek istiyorum.Angular2'de ngOutletContext aracılığıyla kalıba geçirme

@Component({ 
    selector: 'my-component', 
    providers: [], 
    template: ` 
    <template [ngTemplateOutlet]="templ" [ngOutletContext]="{isVisible: true}"> 
    </template> 
    ` 
}) 
export class MyElementComponent implements OnInit { 
    @ContentChild(TemplateRef) templ; 
    constructor(){} 
} 

Şimdi diğer bileşenin iç bileşenini kullanırken:

<my-component> 
    <template> 
     {{isVisible ? 'yes!' : 'no'}} 
    </template> 
</my-component> 

Yani my-component I adıyla templ ile @ContentChild tarafından 's sınıfında işlenir bir şablon geçirerek. i ngTemplateOutlet için templ geçirerek ve buna ek olarak, bir true için isVisible seti vardır ngOutletContext kullanılarak bağlamı geçirerek my-component sitesindeki şablonda sonra

.

Ekranda yes!'u görmeliyiz, ancak bağlamın hiçbir zaman geçmediği anlaşılıyor.

Benim açısal versiyonu: Uzun bir süre sonra

"@angular/common": "^2.3.1", 
"@angular/compiler": "^2.3.1", 
"@angular/core": "^2.3.1", 
+0

Ben aynı sorunu yüzleşiyorum için değişiklik günlüğünü arama yapın. Haklısın, bağlam asla geçmez. Bunun nedeni, içerik olarak öğesine geçirdiğiniz şablonun aslında 'in ana bilgisayarının içeriğine bağlı olmasıdır. Bunu da işe almak istiyorum ama henüz bir yol göremiyorum. –

+0

@AlexanderLeonov Cevabıma bak. Buldum. – Tukkan

cevap

23

, ben yaptım. tek bir değer ile

Örnek: döngü ile

@Component({ 
    selector: 'my-component', 
    providers: [], 
    template: ` 
    <template [ngTemplateOutlet]="templ" [ngOutletContext]="{isVisible: true}"> 
    </template> 
    ` 
}) 
export class MyElementComponent implements OnInit { 
    @ContentChild(TemplateRef) templ; 
    constructor(){} 
} 

<my-component> 
    <template let-isVisible="isVisible"> 
     {{isVisible ? 'yes!' : 'no'}} 
    </template> 
</my-component> 

Örnek:

@Component({ 
    selector: 'my-component', 
    providers: [], 
    template: ` 
    <div *ngFor="let element of data"> 
     <template [ngTemplateOutlet]="templ" [ngOutletContext]="{element: element}"> 
     </template> 
    </div> 
    ` 
}) 
export class MyElementComponent implements OnInit { 
    @ContentChild(TemplateRef) templ; 
    constructor(){ 
     this.data = [{name:'John'}, {name:'Jacob'}]; 
    } 
} 

--- 

<my-component> 
    <template let-element="element"> 
     {{element.name}} 
    </template> 
</my-component> 

Sonuç:

<div>John</div> 
<div>Jacob</div> 
+1

Teşekkürler adamım! Tam da aradığım şey bu. –

4

Başlıkları kadar ngOutletContext kaldırıldı ve ngTemplateOutletContext olarak düzenlenmiştir.

"NgTemplateOutlet # ngTemplateOutletContext"

CHANGELOG

+0

Peki neden bu oy kullanıldı? Sadece CHANGELOG bağlantısını kısa formatlamadım diye mi? Yardımcı bilgi göndermemeli miyim? Daha fazla yardımcı olmak için kapatıldığımdan lütfen bana yardımcı olun –

+0

Orijinal yorumumdan beri oy verildi. Yine yardımcı olmak için teşvik! –

İlgili konular