如何在 Angular 高阶组件 (HOC) 中将 html 元素作为子元素传递?
How to pass html element as child in Angular Higher Order Components (HOC)?
我想在我的 Angular 高阶组件中传递一个 HTML 元素。现在我将子元素作为 @Input 装饰器传递。
我的HOC,Main Container是这样的
<div>
<p> MY EXTRA UI HERE</p>
<ng-container *ngComponentOutlet="child"></ng-container>
</div>
@Component({
selector: 'app-main-container',
templateUrl: './main-container.component.html',
styleUrls: ['./main-container.component.scss'],
})
export class MainContainerComponent {
@Input() child
}
在其他组件中,我像这样使用我的 HOC
我的当前代码:
<app-main-container [child]="child"></app-main-container>
在 .ts 文件中,我像这样传递我的子组件
import { SidebarComponent } from '../sidebar/sidebar.component'
@Component({
selector: 'app-staff',
templateUrl: './staff.component.html',
styleUrls: ['./staff.component.scss'],
})
export class StaffComponent {
child: any = SidebarComponent
}
现在我想做的是,像这样的 React 格式
<app-main-container>
<app-staff-sidebar></app-staff-sidebar>
</app-main-container>
鉴于您在问题中定义的结构
<app-main-container>
<app-staff-sidebar></app-staff-sidebar>
</app-main-container>
我们可以使用 ng-content
来实现。
你的 main-container.component.html
应该这样接受:
<div class="main-container">
<ng-content></ng-content> <!-- This will be exchanged with the `<app-staff-sidebar></app-staff-sidebar>` that you passed in.
</div>
假设您要插入更多内容,这些内容的呈现方式与简单的屈服略有不同,您可以使用 select
关键字表示的 slots
。它基本上是在尝试找到提供的模式。
像这样调用结构:
<app-main-container>
<app-staff-sidebar data-slot-type="right"></app-staff-sidebar>
<div data-slot-type="left"></div>
</app-main-container>
并接受这样的广告位:
<div class="main-container">
<ng-content select="[data-slot-type=left]"></ng-content>
<ng-content select="[data-slot-type=right]"></ng-content>
</div>
select
可以匹配任何给定的模式。它可以是 CSS class、整个标签或 DOM 代表的任何其他内容。
我想在我的 Angular 高阶组件中传递一个 HTML 元素。现在我将子元素作为 @Input 装饰器传递。 我的HOC,Main Container是这样的
<div>
<p> MY EXTRA UI HERE</p>
<ng-container *ngComponentOutlet="child"></ng-container>
</div>
@Component({
selector: 'app-main-container',
templateUrl: './main-container.component.html',
styleUrls: ['./main-container.component.scss'],
})
export class MainContainerComponent {
@Input() child
}
在其他组件中,我像这样使用我的 HOC
我的当前代码:
<app-main-container [child]="child"></app-main-container>
在 .ts 文件中,我像这样传递我的子组件
import { SidebarComponent } from '../sidebar/sidebar.component'
@Component({
selector: 'app-staff',
templateUrl: './staff.component.html',
styleUrls: ['./staff.component.scss'],
})
export class StaffComponent {
child: any = SidebarComponent
}
现在我想做的是,像这样的 React 格式
<app-main-container>
<app-staff-sidebar></app-staff-sidebar>
</app-main-container>
鉴于您在问题中定义的结构
<app-main-container>
<app-staff-sidebar></app-staff-sidebar>
</app-main-container>
我们可以使用 ng-content
来实现。
你的 main-container.component.html
应该这样接受:
<div class="main-container">
<ng-content></ng-content> <!-- This will be exchanged with the `<app-staff-sidebar></app-staff-sidebar>` that you passed in.
</div>
假设您要插入更多内容,这些内容的呈现方式与简单的屈服略有不同,您可以使用 select
关键字表示的 slots
。它基本上是在尝试找到提供的模式。
像这样调用结构:
<app-main-container>
<app-staff-sidebar data-slot-type="right"></app-staff-sidebar>
<div data-slot-type="left"></div>
</app-main-container>
并接受这样的广告位:
<div class="main-container">
<ng-content select="[data-slot-type=left]"></ng-content>
<ng-content select="[data-slot-type=right]"></ng-content>
</div>
select
可以匹配任何给定的模式。它可以是 CSS class、整个标签或 DOM 代表的任何其他内容。