2017-09-20 3 views
0

Angular 4では、ユーザーが内部でカスタムコンテンツを定義できるようにするコンポーネントを実装する必要があるとします。コンポーネントにplacholderを作成する

例:

@Component({ 
    selector: "main-navigation", 
    templateUrl: ` 
<md-sidenav-container> 
    <md-sidenav mode="side" positio="start" opened="true"> 
     <md-nav-list> 
      <a md-list-item *ngFor="let link of links" routerLink="{{link.url}}" routerLinkActive="active">{{link.text}}</a> 
     </md-nav-list> 
    </md-sidenav> 

    <!-- Some placeholder for user's: content should go here --> 

</md-sidenav-container>` 
}) 

そして、そのコンポーネントの使用目的は、そのようなものになるだろう:

<main-navigation> 
    <router-outlet></router-outlet> <!-- <- this is some user content --> 
</main-navigation> 

角度4で、このようなプレースホルダを作成する最も簡単な方法は何ですか?

答えて

0

ここに内部に<ng-content></ng-content>を追加しますか?

@Component({ 
    selector: "main-navigation", 
    templateUrl: ` 
<md-sidenav-container> 
    <md-sidenav mode="side" positio="start" opened="true"> 
     <md-nav-list> 
      <a md-list-item *ngFor="let link of links" routerLink="{{link.url}}" routerLinkActive="active">{{link.text}}</a> 
     </md-nav-list> 
    </md-sidenav> 

    <ng-content></ng-content> <!-- Some placeholder for user's: content should go here --> 

</md-sidenav-container>` 
}) 

これはおそらく、ユーザーが<main-navigation> </main-navigation>タグの間で置く他のどんなとともに<router-outlet></router-outlet>を追加する必要があります。それがあなたが望む振る舞いであるかどうかは正確には分かりませんが、それ以上のことを明確にすれば、私の答えを再評価することができるかもしれません。

+0

ありがとう、それはトリックをしたようですね!それは簡単なことでした!私はそれが公式の文書のどこかにあることを望むだけです。 [トップ20のGoogle検索結果](https://www.google.com/search?q=%22ng-content%22&ei=M5fCWZCSHKHqjwST0rGgAw&start=0&sa=N&biw=)にある「」のドキュメントにはリンクがありません1451&bih = 719)。 –

+1

ニース!この[one](https://scotch.io/tutorials/angular-2-transclusion-using-ng-content)は、アイデアを得るための素敵で簡単な読み物です。それが役に立てば幸い。 – amal

+0

です!あなたの答えの後、私は ''を使って名前付きプレースホルダを作ることができるかどうかを知り始め、この記事の答えを見つけました! –

0

@amalのさらなる発展として、

プレースホルダ、可能なアプローチの一つに選ばれているしたい場合は以下の通りです:次に

... 
<ng-content select="content"></ng-content> 
... 

、あなたが行うことができます:

<main-navigation> 
    <content> 
     <router-outlet></router-outlet> 
    </content> 
</main-navigation> 

クレジットをthis awesome postに。

関連する問題