2017-02-16 60 views
7

考慮以下部分sidebar.component.html傳遞HTML到我的組件

<div class="sidebar"> 
    <ul> 
    <li class="tooltipped" data-position="right" data-delay="50" data-tooltip="Go to the dashboard"> 
     <a href="#"> 
     <i class="material-icons">home</i> 
     <span>Home</span> 
     </a> 
    </li> 
    <li class="tooltipped" data-position="right" data-delay="50" data-tooltip="Manage your times"> 
     <a href="#"> 
     <i class="material-icons">watch_later</i> 
     <span>Times</span> 
     </a> 
    </li> 
    <li class="tooltipped" data-position="right" data-delay="50" data-tooltip="Go to settings"> 
     <a href="#"> 
     <i class="material-icons">settings</i> 
     </a> 
    </li> 
    </ul> 
</div> 

app.component.html,我使用它的標籤(<sidebar>)使用側欄。但是,現在我想要使<li>元素在<sidebar>標籤內給出,以使它們不再位於sidebar.component.html內部以使組件可重複使用。

我不確定這是叫什麼,我無法找到它。

在此先感謝。

+0

我不明白是什麼問題。也許''爲跨越? –

+0

爲了清晰起見,我更新了帖子,我會試用謝謝。 – Limnic

回答

10

<ng-content>其中傳遞的兒童應顯示

@Component({ 
    selector: 'sidebar', 
    template: '<ul><ng-content></ng-content></ul>' 
}) 
export class SidebarComponent { 
} 

創建一個側邊欄組件,並使用它像

<sidebar> 
    <li class="tooltipped" data-position="right" data-delay="50" data-tooltip="Go to the dashboard"> 
     <a href="#"> 
     <i class="material-icons">home</i> 
     <span>Home</span> 
     </a> 
    </li> 
    <li class="tooltipped" data-position="right" data-delay="50" data-tooltip="Manage your times"> 
     <a href="#"> 
     <i class="material-icons">watch_later</i> 
     <span>Times</span> 
     </a> 
    </li> 
    <li class="tooltipped" data-position="right" data-delay="50" data-tooltip="Go to settings"> 
     <a href="#"> 
     <i class="material-icons">settings</i> 
     </a> 
    </li> 
</sidebar> 
+0

是的,這按預期工作!但是,CSS的行爲是什麼?我的樣式不再適用於元素,但是我看不到HTML中會引起選擇器更改的任何更改。 – Limnic

+0

改變之處在於Angular添加'_ng_context-xxx'屬性並在將樣式添加到DOM之前重寫樣式。您需要添加':host/deep/li {}'或類似的元素,以使樣式跨越組件邊界。 –

+1

好的,謝謝,我有足夠的信息讓我走! – Limnic