【问题标题】:Use structural's directive template in child在孩子中使用结构的指令模板
【发布时间】:2020-01-10 03:22:45
【问题描述】:

我想要一种方法让父组件拥有一个模板以传递给子组件(在这种情况下为ReceiverComponent),它应该在ngFor中显示它

@Directive({ selector: '[appSelector]' })
export class SelectorDirective<T> {
    constructor(
        public template: TemplateRef<T>
    ) {
        console.log(this.template);
    }
}
<app-receiver>
  <div *appSelector="let item">Directive-template: {{item}}</div>
</app-receiver>
@Component({
    selector: 'app-receiver',
    templateUrl: './reciver.component.html', // Bellow
})
export class ReceiverComponent implements AfterContentInit {
    @ContentChild(SelectorDirective, { static: false }) item!: SelectorDirective<string>;

    items = Array.from({length: 10}).map((_, i) => `Item #${i}`);

    ngAfterContentInit() {
        console.log(this.item); // It is instance of the SelectorDirective
    }

}
<ng-template let-item #template>
    <div>inline-template: {{item}}</div>
</ng-template>

<div *ngFor="let item of items">
  <ng-container
    [ngTemplateOutlet]="template"
    [ngTemplateOutletContext]="{$implicit: item, odd: odd}"
  ></ng-container>
  <ng-container
    [ngTemplateOutlet]="item.template"
    [ngTemplateOutletContext]="{$implicit: item, odd: odd}"
  ></ng-container>
</div>

我创建了一个最小的应用程序,在这里调试这个问题:https://stackblitz.com/edit/angular-whrjhr


另外,有没有办法将模板直接传递给ngFor,这样我就不必指定所有应该进入上下文的项目?

<ng-container
  [ngForOf]="items"
  [ngForTemplate]="template"
></ng-container>

【问题讨论】:

    标签: angular angular2-template angular2-directives


    【解决方案1】:

    ngFor 正在设置变量 item,因此 item.template 未定义...

    <div *ngFor="let value of items">
      <ng-container
        [ngTemplateOutlet]="template"
        [ngTemplateOutletContext]="{$implicit: value, odd: odd}"
      ></ng-container>
      <ng-container
        [ngTemplateOutlet]="item.template"
        [ngTemplateOutletContext]="{$implicit: value, odd: odd}"
      ></ng-container>
    </div>
    

    【讨论】:

      猜你喜欢
      • 2019-05-26
      • 1970-01-01
      • 1970-01-01
      • 2019-12-16
      • 1970-01-01
      • 2017-01-10
      • 1970-01-01
      • 2017-10-15
      • 1970-01-01
      相关资源
      最近更新 更多