2017-10-08 19 views
6

में टेम्पलेट को गतिशील रूप से बदलना चाहता हूं, मैं ngTemplateOutlet में टेम्पलेट को गतिशील रूप से बदलना चाहता हूं। चयनित टैब बदलते समय ngTemplateOutlet बदल जाएगा।कोणीय 2 गतिशील रूप से ngTemplateOutlet

मेरे पास # टैब 1 और # टैब 2 नामक दो मूल टेम्पलेट्स हैं।

नोट: मैं कोणीय संस्करण 4.

टैब मेनू उदाहरण (एचटीएमएल) का उपयोग कर रहा:

<div class="tabMenu"> 
    <ul> 
     <li *ngFor="let tab of tabLinks" [class.active]="selectedTab.name === tab.name"> 
      <a (click)="selectedTab = tab">{{ tab.name }}</a> 
     </li> 
    </ul> 

    <div class="tabContent">   
     <tab [data]="selectedTab.data"> 
      <ng-container *ngTemplateOutlet="selectedTab.name;context:selectedTab"></ng-container> 
     </tab> 

     <ng-template class="tab1" #Tab1 let-test="data"> 
      <p>Template A - {{ test }}</p>   
     </ng-template> 

     <ng-template class="tab1" #Tab2 let-test="data"> 
      <p>Template B - {{ test }}</p>   
     </ng-template> 

    </div> 
</div> 

यह बुनियादी टाइपप्रति सरणी है:

tabLinks: Array<Object> = [ 
    { 
     name: "Tab1", 
     data: "data tab 1" 
    }, 
    { 
     name: "Tab2", 
     data: "data tab 2" 
    } 
]; 

selectedTab: Object = this.tabLinks[0]; 

उत्तर

5

यदि आप सीधे के बजाय @ViewChild() का उपयोग करते हैं टेम्पलेट चर संदर्भ, आप एक क्षेत्र foo नामित तक पहुँचने के लिए this['foo'] उपयोग कर सकते हैं:

@ViewChild('Tab1') tab1:TemplateRef<any>; 
@ViewChild('Tab2') tab2:TemplateRef<any>; 
<ng-template class="tab1" #Tab1 let-test="data"> 
     <p>Template A - {{ test }}</p>   
    </ng-template> 

    <ng-template class="tab1" #Tab2 let-test="data"> 
     <p>Template B - {{ test }}</p>   
    </ng-template> 
 <ng-container *ngTemplateOutlet="this[selectedTab.name];context:selectedTab"></ng-container> 
+0

मैं ऊपर परिवर्तन किया था। मुझे कोई कंसोल त्रुटियां नहीं मिलती हैं, लेकिन एनजी-कंटेनर – AngularM

+0

से कोई टेम्पलेट संलग्न नहीं है, कोई विचार नहीं। मैं यहां से डीबग नहीं कर सकता। यदि आप एक https://stackblitz.com/ या प्लंकर बनाते हैं जो पुन: पेश करने की अनुमति देता है, तो मैं जांच कर सकता हूं। https://stackblitz.com/edit/angular-goysrm –

+0

यहाँ stackblitz है डी मैं अपने डेटा मैच के लिए आवरण बदल दिया है। मैं इसे रखने के लिए सुझाव दूंगा क्योंकि आपके पास स्टैकब्लिट्ज में आपके डेटा में है। मैंने अपना जवाब अपडेट किया। https://stackblitz.com/edit/angular-bx7f2p – AngularM

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