以角度2再渲染<ng-content>

Har*_*šić 7 javascript angular2-template angular

我有这样的代码

<template *ngIf='mobile'>
  <div class='wrapper'>
    <div class='nav'>
        <ng-content></ng-content>
    </div>
  </div>
</template>

<template *ngIf='desktop'>
  <ng-content></ng-content>
</template>
Run Code Online (Sandbox Code Playgroud)

但是,Angular 2只渲染了一次ng-content.有没有办法让这个案子在没有太多黑客攻击的情况下正常工作?

Gün*_*uer 3

更新角度 5

ngOutletContext被重命名为ngTemplateOutletContext

另请参阅https://github.com/angular/angular/blob/master/CHANGELOG.md#500-beta5-2017-08-29

原来的

您可以将内容作为模板传递,然后可以多次渲染它。

<parent>
 <template>
  projected content here
 </template>
</parent>
Run Code Online (Sandbox Code Playgroud)

在父母中

<ng-container *ngIf='mobile'>
  <div class='wrapper'>
    <div class='nav'>
        <template [ngTemplateOutlet]="templateRef"></template>
    </div>
  </div>
</ng-container>

<template *ngIf='desktop'>
  <template [ngTemplateOutlet]="templateRef"></template>
</template>

export class ParentComponent {
  constructor(private templateRef:TemplateRef){}
}
Run Code Online (Sandbox Code Playgroud)

您还可以将数据传递到模板以与投影内容绑定。

<ng-container *ngIf='mobile'>
  <div class='wrapper'>
    <div class='nav'>
        <template [ngTemplateOutlet]="templateRef" [ntOutletContext]="{ $implicit: data}"></template>
    </div>
  </div>
</ng-container>

<ng-container *ngIf='desktop'>
  <template [ngTemplateOutlet]="templateRef" [ntOutletContext]="{ $implicit: data}"></template>
</ng-container>

export class ParentComponent {
  @Input() data;

  constructor(private templateRef:TemplateRef){}
}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它

<parent [data]="data">
 <template let-item>
  projected content here {{item}}
 </template>
</parent>
Run Code Online (Sandbox Code Playgroud)

另请参阅我自己的 Angular 2 Table 组件 - 2 路数据绑定