2017-04-20 37 views
2

我有一个像这样角2纳克模板在DOM不渲染器内部的元件

import {Component, OnInit} from '@angular/core'; 
import {NgbModal, ModalDismissReasons} from '@ng-bootstrap/ng-bootstrap'; 

@Component({ 
    selector: 'details', 
    templateUrl: 'details.component.html', 
    styleUrls: ["./details.component.scss"], 
}) 
export class DetailsComponent { 

    constructor(
     private modalService: NgbModal 
    ) { 
    } 

    open(content) { 
     this.modalService.open(content).result.then((result) => { 
      console.log("closed"); 
     }, (reason) => { 
      console.log("dismissed"); 
     }); 
    } 

} 

的HTML是一个组件,注意酥料饼的部件只是一个组件来显示HTML

import {Component, OnInit} from '@angular/core'; 

@Component({ 
    selector: 'popover', 
    templateUrl: 'popover.component.html', 
    styleUrls: ["./popover.component.scss"], 
}) 
export class PopOverComponent { 

    constructor(
    ) { 
    } 

} 

和用于酥料饼成分的HTML

<ng-template #popover let-c="close" let-d="dismiss"> 
    <div class="modal-header"> 
    <h4 class="modal-title">Modal title</h4> 
     <button type="button" class="close" aria-label="Close" (click)="d('Cross click')"> 
      <span aria-hidden="true">&times;</span> 
     </button> 
    </div> 
    <div class="modal-body"> 
     <p>One fine body&hellip;</p> 
    </div> 
    <div class="modal-footer"> 
     <button type="button" class="btn btn-secondary" (click)="c('Close click')">Close</button> 
    </div> 
</ng-template> 

我的问题是当我有ng模板环绕测试,h1测试元素不在dom中呈现。更明确地说,ng-template不会渲染我需要将#popover传递给open函数来打开popover的东西。

当我删除ng模板时,我可以看到h1测试。我需要ng-template在dom中呈现,并且我将组件放入组件中,因为popover组件中有很多html。

任何想法,为什么这是表现这种方式?

+0

为什么你需要'NG-template'?那么'ng-container'甚至是使用简单的'div's呢? – sandrooco

+0

我更新了op,表明我使用let作为属性指令,并且只对ng-template有效。我知道我可以将这些功能作为输入传递给组件,但我宁愿简化 – Garuuk

+0

这不是简化,而是复杂的东西......查看ng样式指南。 – sandrooco

回答