在 child 中使用结构的指令模板
Use structural's directive template in child
我想要一种方法让 parent 组件拥有一个模板以传递给 child 组件(在本例中为 ReceiverComponent
),应该在 [=17] 中显示它=]
@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>
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>
我想要一种方法让 parent 组件拥有一个模板以传递给 child 组件(在本例中为 ReceiverComponent
),应该在 [=17] 中显示它=]
@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>
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>