Gil*_*ain 2 javascript ng-template angular ng-container
我正在尝试在我的Angular应用程序中构建一个简单的选项卡菜单。
parent.component.html:
<div>
  <button (click)="selectTab(1)">Tab1</button>
  <button (click)="selectTab(2)">Tab2</button>
  <ng-container *ngTemplateOutlet="(selected == 1) ? template1 : template2">
  </ng-container>
  <ng-template #template1>I'm page 1</ng-template>
  <ng-template #template2>I'm page 2</ng-template>
</div>
Run Code Online (Sandbox Code Playgroud)
parent.component.ts:
public selected = 1;
public selectTab(tabName) {
  this.selected = tabName;
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,只要<ng-template>是同一页面 html 上的一部分。现在我的页面(#template1和#template2的内容)变得复杂,我想将它们移动到单独的组件。
我怎么能注入组件<ng-container>?
要将 Component 注入<ng-container>,您不需要使用*ngTemplateOutlet,而是使用*ngComponentOutlet。
您可以在以下位置查看完整的 API:NgComponentOutlet
tab1.component.html:
<p>tab1 works!</p>
Run Code Online (Sandbox Code Playgroud)
tab2.component.html:
<p>tab2 works!</p>
Run Code Online (Sandbox Code Playgroud)
parent.component.html:
<div>
  <button (click)="selectTab(1)">Tab1</button>
  <button (click)="selectTab(2)">Tab2</button>
  <ng-container *ngComponentOutlet="activeTab">
  </ng-container>
</div>
Run Code Online (Sandbox Code Playgroud)
parent.component.ts:
import { Tab1Component } from './tab1.component';
import { Tab2Component } from './tab2.component';
...
public activeTab = Tab1Component;
public selectTab(tabName) {
  if (tabName == 1) {
    this.activeTab = Tab1Component ;
  }
  else if (tabName == 2) {
    this.activeTab = Tab2Component ;
  }  
}
Run Code Online (Sandbox Code Playgroud)
并且不要忘记将这些动态组件添加到该entryComponents部分。
app.module.ts:
import { Tab1Component } from './tab1.component';
import { Tab2Component } from './tab2.component';
...
@NgModule({
  ...
  entryComponents: [
    Tab1Component,
    Tab2Component,
    ...
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           1719 次  |  
        
|   最近记录:  |