【发布时间】:2018-11-20 03:59:09
【问题描述】:
我正在尝试使用 @ContentChild 获取多个模板引用,但显示第一个。
modal.component.html
<div class="ac-modal">
<ng-container [ngTemplateOutlet]="modalHeader"></ng-container>
<ng-container [ngTemplateOutlet]="modalBody"></ng-container>
<ng-container [ngTemplateOutlet]="modalFooter"></ng-container>
</div>
modal.component.ts
@Component({
selector: 'ac-modal',
templateUrl: './modal.component.html',
styleUrls: ['./modal.component.css']
})
export class ModalComponent implements OnInit, OnDestroy, AfterContentInit {
@ContentChild(TemplateRef) modalHeader: TemplateRef<void>;
@ContentChild(TemplateRef) modalBody: TemplateRef<void>;
@ContentChild(TemplateRef) modalFooter: TemplateRef<void>;
ngAfterContentInit() {
console.log("HEADER: ", this.modalHeader);
console.log("body: ", this.modalBody);
console.log("footer: ", this.modalFooter);
}
}
app.component.html
<ac-modal>
<ac-modal-header *acModalHeader></ac-modal-header>
<ac-modal-body *acModalBody></ac-modal-body>
<ac-modal-footer *acModalFooter></ac-modal-footer>
</ac-modal>
modal-footer.directive.ts
@Directive({
selector: '[acModalFooter]'
})
export class ModalFooterDirective {
constructor(tempalteRef: TemplateRef<void>,
modalComponent: ModalComponent) {
modalComponent.modalFooter = tempalteRef;
}
}
modal-header.directive.ts
@Directive({
selector: '[acModalHeader]'
})
export class ModalFooterDirective {
constructor(tempalteRef: TemplateRef<void>,
modalComponent: ModalComponent) {
modalComponent.modalHeader = tempalteRef;
}
}
modal-body.directive.ts
@Directive({
selector: '[acModalBody]'
})
export class ModalFooterDirective {
constructor(tempalteRef: TemplateRef<void>,
modalComponent: ModalComponent) {
modalComponent.modalBody = tempalteRef;
}
}
输出
modal-header works!
modal-header works!
modal-header works!
无论我在modal.component.html 中放在<ac-modal> 组件中的哪个标签都会显示3 次。 3 次,因为我在 modal.component.html 中有 3 个 <ng-container>,但我无法弄清楚为什么会发生这种情况,因为我为每个传递了不同的模板引用。
【问题讨论】: