考虑到 ng-content 持有者通常是另一个调用它的组件的子组件,您的 parent 名称令人困惑。
<div class="parent">
<ng-content></ng-content>
</div>
调用 HTML 看起来像这样:(您的 ng-content 位于 app-footer 中)
<app-footer>
<p>MY CONTENT TO THE ng-content THINGY</p>
</app-footer>
您需要升级您的应用页脚(ng-content 组件)以具有输入字段
import { Component, Input } from '@angular/core';
//.......
export class FooterComponent {
@Input() displayParentDiv = true;
在你的模板中
<div class="parent" *ngIf="displayParentDiv">
<ng-content></ng-content>
</div>
然后在您的页脚(ng-content holder)文件中:
<p>Pass the input false if you don't want it displayed:</p>
<app-footer [displayParentDiv]="false">
<p>MY CONTENT TO THE ng-content THINGY</p>
</app-footer>
<p> To display it, don't give it any value considering default is true</p>
<app-footer>
<p>MY CONTENT TO THE ng-content THINGY</p>
</app-footer>
我在许多项目中重用的对象的示例代码是工具栏的材质图标导航项的使用是下面的代码。请注意,我默认了所有值,使它们不是必填字段,例如,我只能传递材料图标引用而没有提示或路由器链接
import { Component, Input, Output, EventEmitter } from '@angular/core';
@Component({
selector: 'ps-nav-item',
template: `
<a mat-list-item [routerLink]="routerLink" (click)="navigate.emit()">
<mat-icon mat-list-icon>{{ icon }}</mat-icon>
<span mat-line><ng-content></ng-content></span>
<span mat-line class="secondary">{{ hint }}</span>
</a>
`,
styles: [
`
.secondary {
color: rgba(0, 0, 0, 0.54);
}
`,
],
})
export class NavItemComponent {
@Input() icon = '';
@Input() hint = '';
@Input() routerLink: string | any[] = '/';
@Output() navigate = new EventEmitter();
}
父母 HTML 然后多次调用它:
<ps-nav-item (navigate)="closeSidenav()" *ngIf="loggedIn$ | async" routerLink="/" icon="book" hint="View your report collection">
My Collection
</ps-nav-item>
<ps-nav-item (navigate)="closeSidenav()" *ngIf="loggedIn$ | async" routerLink="/reports/find" icon="search" hint="Search for a report!">
Browse Reports
</ps-nav-item>
<ps-nav-item (navigate)="closeSidenav()" *ngIf="!(loggedIn$ | async)">
Sign In
</ps-nav-item>
<ps-nav-item (navigate)="logout()" *ngIf="loggedIn$ | async">
Sign Out
</ps-nav-item>
参考角度文档